diff --git a/pointprocesses/lecture/firingrates.py b/pointprocesses/lecture/firingrates.py index e302ac8..6b98732 100644 --- a/pointprocesses/lecture/firingrates.py +++ b/pointprocesses/lecture/firingrates.py @@ -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.xaxis.set_ticks_position('bottom') - - ax1.vlines(times[times < (100000*dt)], ymin=0, ymax=1, color="dodgerblue", lw=1.5) 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_yticks([0, 1]) set_axis_fontsize(ax1, 10) + ax1.set_xticks([2.5, 2.75, 3.0, 3.25, 3.5]) ax1.set_xticklabels([]) ax2.plot(time, inst_rate, lw=1.5, label="instantaneous rate") ax2.set_ylabel("firing rate [Hz]", 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_yticks(np.arange(0, 400, 100)) set_axis_fontsize(ax2, 10) + ax2.set_xticks([2.5, 2.75, 3.0, 3.25, 3.5]) ax2.set_xticklabels([]) ax3.plot(time, binn_rate, lw=1.5, label="binned rate") ax3.set_ylabel("firing rate [Hz]", 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_yticks(np.arange(0, 400, 100)) set_axis_fontsize(ax3, 10) + ax3.set_xticks([2.5, 2.75, 3.0, 3.25, 3.5]) ax3.set_xticklabels([]) ax4.plot(time, conv_rate, lw=1.5, label="convolved rate") ax4.set_xlabel("time [s]", fontsize=10) ax4.set_ylabel("firing rate [Hz]", 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_yticks(np.arange(0, 400, 100)) set_axis_fontsize(ax4, 10) fig.set_size_inches(7.5, 5) diff --git a/pointprocesses/lecture/isimethod.py b/pointprocesses/lecture/isimethod.py index b06079d..07578f1 100644 --- a/pointprocesses/lecture/isimethod.py +++ b/pointprocesses/lecture/isimethod.py @@ -17,9 +17,9 @@ def set_rc(): 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) - rng = np.random.RandomState(57281) + rng = np.random.RandomState(seed) times += rng.randn(len(times)) * (isi / 2.5) times = np.delete(times, np.nonzero(times < 0)) 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_ylabel("spikes", fontsize=9) 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["top"].set_visible(False) rate_ax.yaxis.set_ticks_position('left') 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.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(): @@ -75,7 +79,7 @@ def plot_bin_method(): 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='--') 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]) rate = count / 0.05 @@ -124,7 +128,7 @@ def plot_conv_method(): def plot_isi_method(): - spike_times = create_spikes(0.09, 0.5) + spike_times = create_spikes(0.055, 0.5, 1000) plt.xkcd() set_rc() @@ -142,12 +146,15 @@ def plot_isi_method(): t_start = spike_times[i-1] t = spike_times[i] 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) 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_yticks(np.arange(0,100,25)) + rate.set_ylim([0, 50]) + rate.set_yticks(np.arange(0,75,25)) fig.tight_layout() fig.savefig("isimethod.pdf") diff --git a/pointprocesses/lecture/pointprocesses.tex b/pointprocesses/lecture/pointprocesses.tex index d251c3e..7341fa3 100644 --- a/pointprocesses/lecture/pointprocesses.tex +++ b/pointprocesses/lecture/pointprocesses.tex @@ -257,12 +257,12 @@ Abbildung \ref{psthfig} n\"aher erl\"autert. \begin{figure}[tp] \includegraphics[width=\columnwidth]{isimethod} \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 Zeitpunkt eines Aktionspotentials. Die Pfeile zwischen - aufeinanderfolgenden Aktionspotentialen illustrieren das - Interspike Interval. \textbf{B)} Der Kehrwert des Interspike - Intervalls ist die Feuerrate.}\label{instrate} + aufeinanderfolgenden Aktionspotentialen und die Zahlen + illustrieren das Interspike Interval. \textbf{B)} Der Kehrwert + des Interspike Intervalls ist die Feuerrate.}\label{instrate} \end{figure} Ein sehr einfacher Weg, die zeitabh\"angige Feuerrate zu bestimmen ist