new poster template

This commit is contained in:
weygoldt 2023-01-24 17:27:37 +01:00
parent fe41f8f59c
commit 70c4b012be
8 changed files with 159 additions and 110 deletions

View File

@ -133,8 +133,10 @@ class ChirpPlotBuffer:
data_oi, data_oi,
self.data.raw_rate, self.data.raw_rate,
self.t0 - 5, self.t0 - 5,
[np.min(self.frequency) - 100, np.max(self.frequency) + 200] [np.min(self.frequency) - 300, np.max(self.frequency) + 300]
) )
ax0.set_ylim(np.min(self.frequency) - 100,
np.max(self.frequency) + 200)
for track_id in self.data.ids: for track_id in self.data.ids:
@ -157,27 +159,35 @@ class ChirpPlotBuffer:
zorder=10, color=ps.gblue1) zorder=10, color=ps.gblue1)
else: else:
ax0.plot(t-self.t0_old, f, lw=lw, ax0.plot(t-self.t0_old, f, lw=lw,
zorder=10, color=ps.gray, alpha=0.5) zorder=10, color=ps.black)
ax0.fill_between( # ax0.fill_between(
np.arange(self.t0, self.t0 + self.dt, 1 / self.data.raw_rate), # np.arange(self.t0, self.t0 + self.dt, 1 / self.data.raw_rate),
q50 - self.config.minimal_bandwidth / 2, # q50 - self.config.minimal_bandwidth / 2,
q50 + self.config.minimal_bandwidth / 2, # q50 + self.config.minimal_bandwidth / 2,
color=ps.gblue1, # color=ps.gblue1,
lw=1, # lw=1,
ls="dashed", # ls="dashed",
alpha=0.5, # alpha=0.5,
) # )
# ax0.fill_between(
# np.arange(self.t0, self.t0 + self.dt, 1 / self.data.raw_rate),
# search_lower,
# search_upper,
# color=ps.gblue2,
# lw=1,
# ls="dashed",
# alpha=0.5,
# )
ax0.axhline(q50 - self.config.minimal_bandwidth / 2,
color=ps.gblue1, lw=1, ls="dashed")
ax0.axhline(q50 + self.config.minimal_bandwidth / 2,
color=ps.gblue1, lw=1, ls="dashed")
ax0.axhline(search_lower, color=ps.gblue2, lw=1, ls="dashed")
ax0.axhline(search_upper, color=ps.gblue2, lw=1, ls="dashed")
ax0.fill_between(
np.arange(self.t0, self.t0 + self.dt, 1 / self.data.raw_rate),
search_lower,
search_upper,
color=ps.gblue2,
lw=1,
ls="dashed",
alpha=0.5,
)
# ax0.axhline(q50, spec_times[0], spec_times[-1], # ax0.axhline(q50, spec_times[0], spec_times[-1],
# color=ps.gblue1, lw=2, ls="dashed") # color=ps.gblue1, lw=2, ls="dashed")
# ax0.axhline(q50 + self.search_frequency, # ax0.axhline(q50 + self.search_frequency,
@ -187,7 +197,11 @@ class ChirpPlotBuffer:
if len(chirps) > 0: if len(chirps) > 0:
for chirp in chirps: for chirp in chirps:
ax0.scatter( ax0.scatter(
chirp, np.median(self.frequency) + 150, c=ps.black, marker="v" chirp, np.median(self.frequency), c=ps.red, marker=".",
edgecolors=ps.red,
facecolors=ps.red,
zorder=10,
s=70,
) )
# plot waveform of filtered signal # plot waveform of filtered signal
@ -207,25 +221,31 @@ class ChirpPlotBuffer:
c=ps.gblue3, lw=lw, label="baseline inst. freq.") c=ps.gblue3, lw=lw, label="baseline inst. freq.")
# plot filtered and rectified envelope # plot filtered and rectified envelope
ax4.plot(self.time, self.baseline_envelope, c=ps.gblue1, lw=lw) ax4.plot(self.time, self.baseline_envelope *
waveform_scaler, c=ps.gblue1, lw=lw)
ax4.scatter( ax4.scatter(
(self.time)[self.baseline_peaks], (self.time)[self.baseline_peaks],
self.baseline_envelope[self.baseline_peaks], (self.baseline_envelope*waveform_scaler)[self.baseline_peaks],
edgecolors=ps.red, edgecolors=ps.red,
facecolors=ps.red,
zorder=10, zorder=10,
marker="o", marker=".",
facecolors="none", s=70,
# facecolors="none",
) )
# plot envelope of search signal # plot envelope of search signal
ax5.plot(self.time, self.search_envelope, c=ps.gblue2, lw=lw) ax5.plot(self.time, self.search_envelope *
waveform_scaler, c=ps.gblue2, lw=lw)
ax5.scatter( ax5.scatter(
(self.time)[self.search_peaks], (self.time)[self.search_peaks],
self.search_envelope[self.search_peaks], (self.search_envelope*waveform_scaler)[self.search_peaks],
edgecolors=ps.red, edgecolors=ps.red,
facecolors=ps.red,
zorder=10, zorder=10,
marker="o", marker=".",
facecolors="none", s=70,
# facecolors="none",
) )
# plot filtered instantaneous frequency # plot filtered instantaneous frequency
@ -235,16 +255,20 @@ class ChirpPlotBuffer:
self.frequency_time[self.frequency_peaks], self.frequency_time[self.frequency_peaks],
self.frequency_filtered[self.frequency_peaks], self.frequency_filtered[self.frequency_peaks],
edgecolors=ps.red, edgecolors=ps.red,
facecolors=ps.red,
zorder=10, zorder=10,
marker="o", marker=".",
facecolors="none", s=70,
# facecolors="none",
) )
ax0.set_ylabel("frequency [Hz]") ax0.set_ylabel("frequency [Hz]")
ax1.set_ylabel("a.u.") ax1.set_ylabel(r"$\mu$V")
ax2.set_ylabel("a.u.") ax2.set_ylabel(r"$\mu$V")
ax3.set_ylabel("Hz") ax3.set_ylabel("Hz")
ax5.set_ylabel("a.u.") ax4.set_ylabel(r"$\mu$V")
ax5.set_ylabel(r"$\mu$V")
ax6.set_ylabel("Hz")
ax6.set_xlabel("time [s]") ax6.set_xlabel("time [s]")
plt.setp(ax0.get_xticklabels(), visible=False) plt.setp(ax0.get_xticklabels(), visible=False)
@ -323,7 +347,7 @@ def plot_spectrogram(
aspect="auto", aspect="auto",
origin="lower", origin="lower",
interpolation="gaussian", interpolation="gaussian",
alpha=0.6, # alpha=0.6,
) )
# axis.use_sticky_edges = False # axis.use_sticky_edges = False
return spec_times return spec_times
@ -628,16 +652,16 @@ def chirpdetection(datapath: str, plot: str, debug: str = 'false') -> None:
raw_time = np.arange(data.raw.shape[0]) / data.raw_rate raw_time = np.arange(data.raw.shape[0]) / data.raw_rate
# good chirp times for data: 2022-06-02-10_00 # good chirp times for data: 2022-06-02-10_00
# window_start_index = (3 * 60 * 60 + 6 * 60 + 43.5 + 5) * data.raw_rate window_start_index = (3 * 60 * 60 + 6 * 60 + 43.5) * data.raw_rate
# window_duration_index = 60 * data.raw_rate window_duration_index = 60 * data.raw_rate
# t0 = 0 # t0 = 0
# dt = data.raw.shape[0] # dt = data.raw.shape[0]
# window_start_seconds = (23495 + ((28336-23495)/3)) * data.raw_rate # window_start_seconds = (23495 + ((28336-23495)/3)) * data.raw_rate
# window_duration_seconds = (28336 - 23495) * data.raw_rate # window_duration_seconds = (28336 - 23495) * data.raw_rate
window_start_index = 0 # window_start_index = 0
window_duration_index = data.raw.shape[0] # window_duration_index = data.raw.shape[0]
# generate starting points of rolling window # generate starting points of rolling window
window_start_indices = np.arange( window_start_indices = np.arange(
@ -1097,4 +1121,4 @@ if __name__ == "__main__":
datapath = "../data/2022-06-02-10_00/" datapath = "../data/2022-06-02-10_00/"
# datapath = "/home/weygoldt/Data/uni/efishdata/2016-colombia/fishgrid/2016-04-09-22_25/" # datapath = "/home/weygoldt/Data/uni/efishdata/2016-colombia/fishgrid/2016-04-09-22_25/"
# datapath = "/home/weygoldt/Data/uni/chirpdetection/GP2023_chirp_detection/data/mount_data/2020-03-13-10_00/" # datapath = "/home/weygoldt/Data/uni/chirpdetection/GP2023_chirp_detection/data/mount_data/2020-03-13-10_00/"
chirpdetection(datapath, plot="show", debug="false") chirpdetection(datapath, plot="save", debug="false")

View File

@ -23,16 +23,16 @@ def PlotStyle() -> None:
sky = "#89dceb" sky = "#89dceb"
teal = "#94e2d5" teal = "#94e2d5"
green = "#a6e3a1" green = "#a6e3a1"
yellow = "#f9e2af" yellow = "#f9d67f"
orange = "#fab387" orange = "#faa472"
maroon = "#eba0ac" maroon = "#eb8486"
red = "#f38ba8" red = "#f37588"
purple = "#cba6f7" purple = "#d89bf7"
pink = "#f5c2e7" pink = "#f59edb"
lavender = "#b4befe" lavender = "#b4befe"
gblue1 = "#8cb8ff" gblue1 = "#89b4fa"
gblue2 = "#7cdcdc" gblue2 = "#89dceb"
gblue3 = "#82e896" gblue3 = "#a6e3a1"
@classmethod @classmethod
def lims(cls, track1, track2): def lims(cls, track1, track2):
@ -108,6 +108,9 @@ def PlotStyle() -> None:
@classmethod @classmethod
def set_boxplot_color(cls, bp, color): def set_boxplot_color(cls, bp, color):
plt.setp(bp["boxes"], color=color) plt.setp(bp["boxes"], color=color)
plt.setp(bp["whiskers"], color=color)
plt.setp(bp["caps"], color=color)
plt.setp(bp["medians"], color=color)
@classmethod @classmethod
def label_subplots(cls, labels, axes, fig): def label_subplots(cls, labels, axes, fig):
@ -226,7 +229,7 @@ def PlotStyle() -> None:
plt.rc("legend", fontsize=SMALL_SIZE) # legend fontsize plt.rc("legend", fontsize=SMALL_SIZE) # legend fontsize
plt.rc("figure", titlesize=BIGGER_SIZE) # fontsize of the figure title plt.rc("figure", titlesize=BIGGER_SIZE) # fontsize of the figure title
plt.rcParams["image.cmap"] = 'cmo.haline' plt.rcParams["image.cmap"] = "cmo.haline"
plt.rcParams["axes.xmargin"] = 0.05 plt.rcParams["axes.xmargin"] = 0.05
plt.rcParams["axes.ymargin"] = 0.1 plt.rcParams["axes.ymargin"] = 0.1
plt.rcParams["axes.titlelocation"] = "left" plt.rcParams["axes.titlelocation"] = "left"
@ -247,11 +250,11 @@ def PlotStyle() -> None:
# dark mode modifications # dark mode modifications
plt.rcParams["boxplot.flierprops.color"] = white plt.rcParams["boxplot.flierprops.color"] = white
plt.rcParams["boxplot.flierprops.markeredgecolor"] = white plt.rcParams["boxplot.flierprops.markeredgecolor"] = gray
plt.rcParams["boxplot.boxprops.color"] = gray plt.rcParams["boxplot.boxprops.color"] = gray
plt.rcParams["boxplot.whiskerprops.color"] = white plt.rcParams["boxplot.whiskerprops.color"] = gray
plt.rcParams["boxplot.capprops.color"] = white plt.rcParams["boxplot.capprops.color"] = gray
plt.rcParams["boxplot.medianprops.color"] = white plt.rcParams["boxplot.medianprops.color"] = gray
plt.rcParams["text.color"] = white plt.rcParams["text.color"] = white
plt.rcParams["axes.facecolor"] = black # axes background color plt.rcParams["axes.facecolor"] = black # axes background color
plt.rcParams["axes.edgecolor"] = gray # axes edge color plt.rcParams["axes.edgecolor"] = gray # axes edge color
@ -264,20 +267,22 @@ def PlotStyle() -> None:
plt.rcParams["axes.spines.top"] = False plt.rcParams["axes.spines.top"] = False
plt.rcParams["axes.spines.right"] = False plt.rcParams["axes.spines.right"] = False
plt.rcParams["axes.prop_cycle"] = cycler( plt.rcParams["axes.prop_cycle"] = cycler(
'color', [ "color",
'#b4befe', [
'#89b4fa', "#b4befe",
'#74c7ec', "#89b4fa",
'#89dceb', "#74c7ec",
'#94e2d5', "#89dceb",
'#a6e3a1', "#94e2d5",
'#f9e2af', "#a6e3a1",
'#fab387', "#f9e2af",
'#eba0ac', "#fab387",
'#f38ba8', "#eba0ac",
'#cba6f7', "#f38ba8",
'#f5c2e7', "#cba6f7",
]) "#f5c2e7",
],
)
plt.rcParams["xtick.color"] = gray # color of the ticks plt.rcParams["xtick.color"] = gray # color of the ticks
plt.rcParams["ytick.color"] = gray # color of the ticks plt.rcParams["ytick.color"] = gray # color of the ticks
plt.rcParams["grid.color"] = dark_gray # grid color plt.rcParams["grid.color"] = dark_gray # grid color
@ -292,12 +297,11 @@ if __name__ == "__main__":
s = PlotStyle() s = PlotStyle()
import matplotlib.pyplot as plt import matplotlib.cbook as cbook
import matplotlib.cm as cm import matplotlib.cm as cm
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
import matplotlib.cbook as cbook
from matplotlib.path import Path
from matplotlib.patches import PathPatch from matplotlib.patches import PathPatch
from matplotlib.path import Path
# Fixing random state for reproducibility # Fixing random state for reproducibility
np.random.seed(19680801) np.random.seed(19680801)
@ -305,14 +309,20 @@ if __name__ == "__main__":
delta = 0.025 delta = 0.025
x = y = np.arange(-3.0, 3.0, delta) x = y = np.arange(-3.0, 3.0, delta)
X, Y = np.meshgrid(x, y) X, Y = np.meshgrid(x, y)
Z1 = np.exp(-X**2 - Y**2) Z1 = np.exp(-(X**2) - Y**2)
Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2) Z2 = np.exp(-((X - 1) ** 2) - (Y - 1) ** 2)
Z = (Z1 - Z2) * 2 Z = (Z1 - Z2) * 2
fig1, ax = plt.subplots() fig1, ax = plt.subplots()
im = ax.imshow(Z, interpolation='bilinear', cmap=cm.RdYlGn, im = ax.imshow(
origin='lower', extent=[-3, 3, -3, 3], Z,
vmax=abs(Z).max(), vmin=-abs(Z).max()) interpolation="bilinear",
cmap=cm.RdYlGn,
origin="lower",
extent=[-3, 3, -3, 3],
vmax=abs(Z).max(),
vmin=-abs(Z).max(),
)
plt.show() plt.show()
@ -325,22 +335,21 @@ if __name__ == "__main__":
all_data = [np.random.normal(0, std, 100) for std in range(6, 10)] all_data = [np.random.normal(0, std, 100) for std in range(6, 10)]
# plot violin plot # plot violin plot
axs[0].violinplot(all_data, axs[0].violinplot(all_data, showmeans=False, showmedians=True)
showmeans=False, axs[0].set_title("Violin plot")
showmedians=True)
axs[0].set_title('Violin plot')
# plot box plot # plot box plot
axs[1].boxplot(all_data) axs[1].boxplot(all_data)
axs[1].set_title('Box plot') axs[1].set_title("Box plot")
# adding horizontal grid lines # adding horizontal grid lines
for ax in axs: for ax in axs:
ax.yaxis.grid(True) ax.yaxis.grid(True)
ax.set_xticks([y + 1 for y in range(len(all_data))], ax.set_xticks(
labels=['x1', 'x2', 'x3', 'x4']) [y + 1 for y in range(len(all_data))], labels=["x1", "x2", "x3", "x4"]
ax.set_xlabel('Four separate samples') )
ax.set_ylabel('Observed values') ax.set_xlabel("Four separate samples")
ax.set_ylabel("Observed values")
plt.show() plt.show()
@ -352,24 +361,42 @@ if __name__ == "__main__":
theta = np.linspace(0.0, 2 * np.pi, N, endpoint=False) theta = np.linspace(0.0, 2 * np.pi, N, endpoint=False)
radii = 10 * np.random.rand(N) radii = 10 * np.random.rand(N)
width = np.pi / 4 * np.random.rand(N) width = np.pi / 4 * np.random.rand(N)
colors = cmo.cm.haline(radii / 10.) colors = cmo.cm.haline(radii / 10.0)
ax = plt.subplot(projection='polar') ax = plt.subplot(projection="polar")
ax.bar(theta, radii, width=width, bottom=0.0, color=colors, alpha=0.5) ax.bar(theta, radii, width=width, bottom=0.0, color=colors, alpha=0.5)
plt.show() plt.show()
methods = [None, 'none', 'nearest', 'bilinear', 'bicubic', 'spline16', methods = [
'spline36', 'hanning', 'hamming', 'hermite', 'kaiser', 'quadric', None,
'catrom', 'gaussian', 'bessel', 'mitchell', 'sinc', 'lanczos'] "none",
"nearest",
"bilinear",
"bicubic",
"spline16",
"spline36",
"hanning",
"hamming",
"hermite",
"kaiser",
"quadric",
"catrom",
"gaussian",
"bessel",
"mitchell",
"sinc",
"lanczos",
]
# Fixing random state for reproducibility # Fixing random state for reproducibility
np.random.seed(19680801) np.random.seed(19680801)
grid = np.random.rand(4, 4) grid = np.random.rand(4, 4)
fig, axs = plt.subplots(nrows=3, ncols=6, figsize=(9, 6), fig, axs = plt.subplots(
subplot_kw={'xticks': [], 'yticks': []}) nrows=3, ncols=6, figsize=(9, 6), subplot_kw={"xticks": [], "yticks": []}
)
for ax, interp_method in zip(axs.flat, methods): for ax, interp_method in zip(axs.flat, methods):
ax.imshow(grid, interpolation=interp_method) ax.imshow(grid, interpolation=interp_method)

View File

@ -41,9 +41,9 @@ def main():
freqtime2, freq2 = instantaneous_frequency( freqtime2, freq2 = instantaneous_frequency(
filtered2, data.raw_rate, smoothing_window=3) filtered2, data.raw_rate, smoothing_window=3)
ax1.plot(freqtime1*timescaler, freq1, color=ps.gblue1, ax1.plot(freqtime1*timescaler, freq1, color=ps.red,
lw=2, label=f"fish 1, {np.median(freq1):.0f} Hz") lw=2, label=f"fish 1, {np.median(freq1):.0f} Hz")
ax1.plot(freqtime2*timescaler, freq2, color=ps.gblue3, ax1.plot(freqtime2*timescaler, freq2, color=ps.orange,
lw=2, label=f"fish 2, {np.median(freq2):.0f} Hz") lw=2, label=f"fish 2, {np.median(freq2):.0f} Hz")
ax1.legend(bbox_to_anchor=(0, 1.02, 1, 0.2), loc="lower center", ax1.legend(bbox_to_anchor=(0, 1.02, 1, 0.2), loc="lower center",
mode="normal", borderaxespad=0, ncol=2) mode="normal", borderaxespad=0, ncol=2)

BIN
poster/figs/algorithm.pdf Normal file

Binary file not shown.

BIN
poster/figs/introplot.pdf Normal file

Binary file not shown.

Binary file not shown.

View File

@ -7,7 +7,7 @@ blockverticalspace=2mm, colspace=20mm, subcolspace=0mm]{tikzposter} %Default val
\begin{document} \begin{document}
\renewcommand{\baselinestretch}{1} \renewcommand{\baselinestretch}{1}
\title{\parbox{1500pt}{Poster}} \title{\parbox{1500pt}{Detection of transient communication signals in weakly electric fish}}
\author{Sina Prause, Alexander Wendt, and Patrick Weygoldt} \author{Sina Prause, Alexander Wendt, and Patrick Weygoldt}
\institute{Supervised by Till Raab \& Jan Benda, Neuroethology Lab, University of Tuebingen} \institute{Supervised by Till Raab \& Jan Benda, Neuroethology Lab, University of Tuebingen}
\usetitlestyle[]{sampletitle} \usetitlestyle[]{sampletitle}
@ -21,17 +21,15 @@ blockverticalspace=2mm, colspace=20mm, subcolspace=0mm]{tikzposter} %Default val
sender identification of freely interacting individuals impossible. sender identification of freely interacting individuals impossible.
This profoundly limits our current understanding of chirps to experiments This profoundly limits our current understanding of chirps to experiments
with single - or physically separated - individuals. with single - or physically separated - individuals.
\vspace{0.6cm} % \begin{tikzfigure}[]
\begin{tikzfigure}[] % \label{griddrawing}
\label{griddrawing} % \includegraphics[width=1\linewidth]{figs/introplot}
\includegraphics[width=0.5\linewidth]{example-image-a} % \end{tikzfigure}
\end{tikzfigure}
} }
\myblock[TranspBlock]{Chirp detection}{ \myblock[TranspBlock]{Chirp detection}{
\begin{tikzfigure}[] \begin{tikzfigure}[]
\label{fig:example_a} \label{fig:example_a}
\includegraphics[width=0.5\linewidth]{example-image-a} \includegraphics[width=1\linewidth]{figs/algorithm}
\end{tikzfigure} \end{tikzfigure}
\vspace{0cm} \vspace{0cm}
} }
@ -67,7 +65,7 @@ blockverticalspace=2mm, colspace=20mm, subcolspace=0mm]{tikzposter} %Default val
\vspace{-1cm} \vspace{-1cm}
} }
\myblock[TranspBlock]{Conclusion}{ \myblock[GrayBlock]{Conclusion}{
\begin{itemize} \begin{itemize}
\setlength\itemsep{0.5em} \setlength\itemsep{0.5em}
\item Our analysis is the first to indicate that \textit{A. leptorhynchus} uses long, diffuse and synchronized EOD$f$ signals to communicate in addition to chirps and rises. \item Our analysis is the first to indicate that \textit{A. leptorhynchus} uses long, diffuse and synchronized EOD$f$ signals to communicate in addition to chirps and rises.

View File

@ -1,9 +1,9 @@
\tikzposterlatexaffectionproofoff \tikzposterlatexaffectionproofoff
\usetheme{Default} \usetheme{Default}
\definecolor{text}{HTML}{ffffff} \definecolor{text}{HTML}{e0e4f7}
\definecolor{background}{HTML}{080808} \definecolor{background}{HTML}{111116}
\definecolor{boxes}{HTML}{1E1E1E} \definecolor{boxes}{HTML}{2a2a32}
\definecolor{unired}{HTML}{a51e37} \definecolor{unired}{HTML}{a51e37}
\colorlet{blocktitlefgcolor}{text} \colorlet{blocktitlefgcolor}{text}