I put the data into a list of lists of numpy arrays. The following script generated a plot similar to what Juan attached:
import matplotlib.pyplot as plt
import numpy as np
def model(t, ii, jj):
“”"
Returns some numbers according to the independent variable, t, and
parameters of the model, ii and jj.
“”"
return (jj*6+ii)*np.ones_like(t)
generate data (i.e. model + some random values)
t = np.linspace(-2.5, 2.5, 11)
data = [
[model(t, ii, jj) + np.random.rand(len(t)) - .5
for ii in range(6)] # different sessions
for jj in range(2)] # accuracy/speed
do the plotting
colors = [‘b’, ‘r’]
titles = [‘Accuracy emphasis’, ‘Speed emphasis’]
fig, big_axes = plt.subplots(figsize=(16, 6), nrows=2, ncols=1, sharey=True)
for row, big_ax in enumerate(big_axes):
big_ax.set_ylabel(‘RT distributions’)
big_ax.set_xlabel(‘Response time [s]’)
big_ax.set_title(titles[row])
big_ax.tick_params(labelcolor=(1.,1.,1.,0.), top=‘off’, bottom=‘off’, left=‘off’, right=‘off’)
big_ax._frameon = False
for jj, emph_data in enumerate(data):
for ii, iidata in enumerate(emph_data):
ax = fig.add_subplot(len(data), len(emph_data), jj*len(emph_data)+ii+1)
# plot bars:
ax.bar(t, iidata,
color=colors[jj],
width=(max(t)-min(t))/(len(t)-1), # for non-overlapping bars
linewidth=0) # no outlines
# plot models:
ax.plot(t, model(t, ii, jj), ‘k’, linewidth=2)
# annotate axes etc.
ax.set_xticks((-2.5, 0., 2.5))
ax.set_ylim((-.1, 12.8))
ax.annotate('Session {}'.format(ii+1), xy=(-2.4, 11.8))
plt.tight_layout()
plt.show()
How to add the centered titles for each row is described here : http://stackoverflow.com/questions/27426668/row-titles-for-matplotlib-subplot
Jan
···
On 8 June 2015 at 03:27, Paul Hobson <pmhobson@…287…> wrote:
(apologies if the list receives this twice)
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Juan,
It is, of course, very difficult to give any concrete advice without knowing how your data are stored.
In any case, seaborn builds on matplotlib to provide some very advanced visualization with a very concise API.
I recommend you look into the seaborn.distplot function and seaborn.FacetGrid class.
http://web.stanford.edu/~mwaskom/software/seaborn/
-Paul
On Fri, Jun 5, 2015 at 9:14 AM, Juan Wu <wujuan22@…287…> wrote:
Hi, Experts,
My colleagues and I have a question, how we can make a plot via python like below. According to a guy’s original paper, "Each panel shows the normalized histograms of the observed data (bar plots) and the model prediction (black lines) ".
I believe that people can make it with Matplotlib. Any code suggestion (with simple example data) would be much appreciated.
(I am more comfortable with Matlab, but now the python code is preferred).
J