figure updates: interspike intervals in isimethod, more detailed view in firingrates

This commit is contained in:
Jan Grewe 2015-11-18 22:25:01 +01:00
parent e5f680fcd7
commit 139c825030
3 changed files with 29 additions and 17 deletions

View File

@ -218,38 +218,43 @@ def plot_comparison(spike_times, bin_width, sigma, max_t=30., dt=1e-4):
ax4.yaxis.set_ticks_position('left') ax4.yaxis.set_ticks_position('left')
ax4.xaxis.set_ticks_position('bottom') ax4.xaxis.set_ticks_position('bottom')
ax1.vlines(times[times < (100000*dt)], ymin=0, ymax=1, color="dodgerblue", lw=1.5) ax1.vlines(times[times < (100000*dt)], ymin=0, ymax=1, color="dodgerblue", lw=1.5)
ax1.set_ylabel("spikes", fontsize=10) ax1.set_ylabel("spikes", fontsize=10)
ax1.set_xlim([1.5, 3.5]) ax1.set_xlim([2.5, 3.5])
ax1.set_ylim([0, 1]) ax1.set_ylim([0, 1])
ax1.set_yticks([0, 1]) ax1.set_yticks([0, 1])
set_axis_fontsize(ax1, 10) set_axis_fontsize(ax1, 10)
ax1.set_xticks([2.5, 2.75, 3.0, 3.25, 3.5])
ax1.set_xticklabels([]) ax1.set_xticklabels([])
ax2.plot(time, inst_rate, lw=1.5, label="instantaneous rate") ax2.plot(time, inst_rate, lw=1.5, label="instantaneous rate")
ax2.set_ylabel("firing rate [Hz]", fontsize=10) ax2.set_ylabel("firing rate [Hz]", fontsize=10)
ax2.legend(fontsize=10) ax2.legend(fontsize=10)
ax2.set_xlim([1.5, 3.5]) ax2.set_xlim([2.5, 3.5])
ax2.set_ylim([0, 300]) ax2.set_ylim([0, 300])
ax2.set_yticks(np.arange(0, 400, 100))
set_axis_fontsize(ax2, 10) set_axis_fontsize(ax2, 10)
ax2.set_xticks([2.5, 2.75, 3.0, 3.25, 3.5])
ax2.set_xticklabels([]) ax2.set_xticklabels([])
ax3.plot(time, binn_rate, lw=1.5, label="binned rate") ax3.plot(time, binn_rate, lw=1.5, label="binned rate")
ax3.set_ylabel("firing rate [Hz]", fontsize=10) ax3.set_ylabel("firing rate [Hz]", fontsize=10)
ax3.legend(fontsize=10) ax3.legend(fontsize=10)
ax3.set_xlim([1.5, 3.5]) ax3.set_xlim([2.5, 3.5])
ax3.set_ylim([0, 300]) ax3.set_ylim([0, 300])
ax3.set_yticks(np.arange(0, 400, 100))
set_axis_fontsize(ax3, 10) set_axis_fontsize(ax3, 10)
ax3.set_xticks([2.5, 2.75, 3.0, 3.25, 3.5])
ax3.set_xticklabels([]) ax3.set_xticklabels([])
ax4.plot(time, conv_rate, lw=1.5, label="convolved rate") ax4.plot(time, conv_rate, lw=1.5, label="convolved rate")
ax4.set_xlabel("time [s]", fontsize=10) ax4.set_xlabel("time [s]", fontsize=10)
ax4.set_ylabel("firing rate [Hz]", fontsize=10) ax4.set_ylabel("firing rate [Hz]", fontsize=10)
ax4.legend(fontsize=10) ax4.legend(fontsize=10)
ax4.set_xlim([1.5, 3.5]) ax4.set_xlim([2.5, 3.5])
ax4.set_xticks([2.5, 2.75, 3.0, 3.25, 3.5])
ax4.set_ylim([0, 300]) ax4.set_ylim([0, 300])
ax4.set_yticks(np.arange(0, 400, 100))
set_axis_fontsize(ax4, 10) set_axis_fontsize(ax4, 10)
fig.set_size_inches(7.5, 5) fig.set_size_inches(7.5, 5)

View File

@ -17,9 +17,9 @@ def set_rc():
plt.rcParams['ytick.direction'] = "out" plt.rcParams['ytick.direction'] = "out"
def create_spikes(isi=0.08, duration=0.5): def create_spikes(isi=0.08, duration=0.5, seed=57111):
times = np.arange(0., duration, isi) times = np.arange(0., duration, isi)
rng = np.random.RandomState(57281) rng = np.random.RandomState(seed)
times += rng.randn(len(times)) * (isi / 2.5) times += rng.randn(len(times)) * (isi / 2.5)
times = np.delete(times, np.nonzero(times < 0)) times = np.delete(times, np.nonzero(times < 0))
times = np.delete(times, np.nonzero(times > duration)) times = np.delete(times, np.nonzero(times > duration))
@ -42,14 +42,18 @@ def setup_axis(spikes_ax, rate_ax):
spikes_ax.set_ylim([0, 1.05]) spikes_ax.set_ylim([0, 1.05])
spikes_ax.set_ylabel("spikes", fontsize=9) spikes_ax.set_ylabel("spikes", fontsize=9)
spikes_ax.text(-0.125, 1.2, "A", transform=spikes_ax.transAxes, size=10) spikes_ax.text(-0.125, 1.2, "A", transform=spikes_ax.transAxes, size=10)
spikes_ax.set_xlim([0, 0.5])
spikes_ax.set_xticklabels(np.arange(0., 600, 100))
rate_ax.spines["right"].set_visible(False) rate_ax.spines["right"].set_visible(False)
rate_ax.spines["top"].set_visible(False) rate_ax.spines["top"].set_visible(False)
rate_ax.yaxis.set_ticks_position('left') rate_ax.yaxis.set_ticks_position('left')
rate_ax.xaxis.set_ticks_position('bottom') rate_ax.xaxis.set_ticks_position('bottom')
rate_ax.set_xlabel('time[s]', fontsize=9) rate_ax.set_xlabel('time[ms]', fontsize=9)
rate_ax.set_ylabel('firing rate [Hz]', fontsize=9) rate_ax.set_ylabel('firing rate [Hz]', fontsize=9)
rate_ax.text(-0.125, 1.15, "B", transform=rate_ax.transAxes, size=10) rate_ax.text(-0.125, 1.15, "B", transform=rate_ax.transAxes, size=10)
rate_ax.set_xlim([0, 0.5])
rate_ax.set_xticklabels(np.arange(0., 600, 100))
def plot_bin_method(): def plot_bin_method():
@ -75,7 +79,7 @@ def plot_bin_method():
spikes.vlines(spike_times, 0., 1., color="darkblue", lw=1.25) spikes.vlines(spike_times, 0., 1., color="darkblue", lw=1.25)
spikes.vlines(np.hstack((0,bins)), 0., 1.25, color="red", lw=1.5, linestyles='--') spikes.vlines(np.hstack((0,bins)), 0., 1.25, color="red", lw=1.5, linestyles='--')
for i,c in enumerate(count): for i,c in enumerate(count):
spikes.text(bins[i] + bins[1]/2, 1.05, str(c), fontdict={'color':'red'}) spikes.text(bins[i] + bins[1]/2, 1.05, str(c), fontdict={'color':'red', 'size':9})
spikes.set_xlim([0, duration]) spikes.set_xlim([0, duration])
rate = count / 0.05 rate = count / 0.05
@ -124,7 +128,7 @@ def plot_conv_method():
def plot_isi_method(): def plot_isi_method():
spike_times = create_spikes(0.09, 0.5) spike_times = create_spikes(0.055, 0.5, 1000)
plt.xkcd() plt.xkcd()
set_rc() set_rc()
@ -142,12 +146,15 @@ def plot_isi_method():
t_start = spike_times[i-1] t_start = spike_times[i-1]
t = spike_times[i] t = spike_times[i]
spikes.annotate(s='', xy=(t_start, 0.5), xytext=(t,0.5), arrowprops=dict(arrowstyle='<->'), color='red') spikes.annotate(s='', xy=(t_start, 0.5), xytext=(t,0.5), arrowprops=dict(arrowstyle='<->'), color='red')
spikes.text(t_start+0.01, 0.75,
"{0:.1f}".format((t - t_start)*1000),
fontdict={'color':'red', 'size':7})
i_rate = 1./np.diff(spike_times) i_rate = 1./np.diff(spike_times)
rate.step(spike_times, np.hstack((i_rate, i_rate[-1])),color="darkblue", lw=1.25, where="post") rate.step(spike_times, np.hstack((i_rate, i_rate[-1])),color="darkblue", lw=1.25, where="post")
rate.set_ylim([0, 75]) rate.set_ylim([0, 50])
rate.set_yticks(np.arange(0,100,25)) rate.set_yticks(np.arange(0,75,25))
fig.tight_layout() fig.tight_layout()
fig.savefig("isimethod.pdf") fig.savefig("isimethod.pdf")

View File

@ -257,12 +257,12 @@ Abbildung \ref{psthfig} n\"aher erl\"autert.
\begin{figure}[tp] \begin{figure}[tp]
\includegraphics[width=\columnwidth]{isimethod} \includegraphics[width=\columnwidth]{isimethod}
\titlecaption{Bestimmung des zeitabh\"angigen Feuerrate aus dem \titlecaption{Bestimmung des zeitabh\"angigen Feuerrate aus dem
Interspike Intervall.}{\textbf{A)} Skizze eines Rasterplots einer Interspike Intervall.}{\textbf{A)} Skizze eines Rasterplots einer
einzelnen neuronalen Antwort. Jeder vertikale Strich notiert den einzelnen neuronalen Antwort. Jeder vertikale Strich notiert den
Zeitpunkt eines Aktionspotentials. Die Pfeile zwischen Zeitpunkt eines Aktionspotentials. Die Pfeile zwischen
aufeinanderfolgenden Aktionspotentialen illustrieren das aufeinanderfolgenden Aktionspotentialen und die Zahlen
Interspike Interval. \textbf{B)} Der Kehrwert des Interspike illustrieren das Interspike Interval. \textbf{B)} Der Kehrwert
Intervalls ist die Feuerrate.}\label{instrate} des Interspike Intervalls ist die Feuerrate.}\label{instrate}
\end{figure} \end{figure}
Ein sehr einfacher Weg, die zeitabh\"angige Feuerrate zu bestimmen ist Ein sehr einfacher Weg, die zeitabh\"angige Feuerrate zu bestimmen ist