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')
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With