I am running the following snippet of code in the ipython notebook, using the pandas
data analysis library along with matplotlib.pyplot
.
titles = {'gradStat_p3': "P3: Gradiometers", 'magStat_p3': "P3: Magnetometers",
'gradStat_mmn': "MMN: Gradiometers", 'magStat_mmn': "MMN: Magnetometers"}
scales = {'gradStat': (-2.0 * 1e-22, 3.5 * 1e-22), 'magStat': (-1.6 * 1e-25, 4.5 * 1e-25)}
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(8, 5))
fig.tight_layout()
for c, component in enumerate(('p3', 'mmn')):
for s, sensor in enumerate(('gradStat', 'magStat')):
key = sensor + '_' + component
axes[c, s].set_ylim(scales[sensor])
agg = aggregated[key]
# Plot
agg.plot(ax=axes[c, s], kind='bar', legend=False, title=titles[key])
axes[c, s].set_xticklabels(agg.index.format(names=False))
if not c: # hide the labels
axes[c, s].xaxis.set_visible(False)
saveFile = '/tmp/ERF_comparative_barplot.pdf'
fig.savefig(saveFile)
When the above code is executed, the following (correct) plot is produced in the ipython notebook's inline graphical output:
Note that the x-lables are correctly displayed.
When the image is saved, however, the x-labels are cropped as such:
I have tried calling fig.savefig(savefile, bbox_inches=0
, but to no avail. How can I avoid this cropping?
NOTE: For your convenience, I have pickled the aggregated
variable here . This is a dictionary of pandas DataFrame objects and it should be all you need to run the above code and reproduce the bug (assuming you have pandas v.0.8.1 installed).
Thanks very much in advance!
You can use fig.tight_layout()
.
fig, ax = subplots(1,1,1)
ax.plot(np.random.randn(5))
ax.set_xticklabels(['this is a very long label', 'b', 'c', 'd', 'e'], rotation=90)
fig.tight_layout()
fig.savefig('test.pdf')
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.