python - 我怎样才能保存这个 matplotlib 图,这样 x 轴标签就不会被裁剪掉?

标签 python matplotlib pandas

我在 ipython 笔记本中运行以下代码片段,使用 pandas 数据分析库和 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)

执行上述代码时,ipython notebook 的内联图形输出中会生成以下(正确的)绘图:

Correct format

请注意 x 标签已正确显示。

然而,当保存图像时,x 标签被裁剪成这样:

Erroneous format

我试过调用 fig.savefig(savefile, bbox_inches=0,但无济于事。我怎样才能避免这种裁剪?

注意:为了您的方便,我已经腌制了aggregated 变量here .这是 pandas DataFrame 对象的字典,它应该是您运行上述代码并重现错误所需的全部(假设您安装了 pandas v.0.8.1)。

非常感谢!

最佳答案

您可以使用 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')

关于python - 我怎样才能保存这个 matplotlib 图,这样 x 轴标签就不会被裁剪掉?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12490657/

相关文章:

python - 就地更改 Pandas 数据框列值

python - 将 kenneth French 数据转换为 python 中的每日日期时间格式

python - 嵌套列表迭代

python - 如何将 CURLOPT_MAX_RECV_SPEED_LARGE 选项与 pycurl 和 Python 一起使用?

python - Matplotlib 图例中的文本对齐

python - 在 Python 中的 Pandas 中实现 R scale 函数?

python - 如何将 httpie 与 httpie-aws-authv4 捆绑到 Python zipapp 中?

python - 木星 |如何旋转 3D 图形

python - pandas 线图导数的绘图变化

python - 有没有办法在 pandas 列之间进行条件减法?