简体   繁体   中英

How can I save this matplotlib figure such that the x-axis labels are not cropped out?

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM