#%% [markdown] # This snippet plots several spiking trains in a raster plot. # Install the following package before running : # - streamlit for the demo app # - matplotlib and seaborn for visualization # - numpy for simple random generator and array handling #%% import streamlit as st import numpy as np import matplotlib.pyplot as plt import seaborn as sns bar = st.sidebar.progress(0) def app(): # theme and colors sns.set_style("white") st.title("Spike Train Visualizer") st.sidebar.title("Parameters") num_of_channels = st.sidebar.slider("Number of channels?", 1, 20, 5) plot = spikeplot(num_of_channels) plot.show() txt = st.empty() txt.markdown("This sample code uses `matplotlib.pyplot.eventplot` to visualize a set of spike trains in a single plot.") st.pyplot() # demo app bar.progress(100) bar.empty() def spikeplot(num_of_channels=5): # `spike_times` contains the timestamp for each even in the spike train. # generate random timestamps (0 to 100s) spike_times = np.random.random([num_of_channels,50]) * 100 bar.progress(10) #* creating the plot. It also accepts color and linelength as arrays for colors and lengths. plt.eventplot(spike_times, color="blue", linelength=0.9) bar.progress(50) # title and axis plt.title("Sample spike train plot") plt.xlabel("time") # plt.ylabel("channels") #plt.axis('off') plt.yticks(range(0, num_of_channels),[f'Channel {l+1}' for l in range(num_of_channels)]) return plt if __name__ == "__main__": app()