使用预设宽度/高度比右侧的图例保存matplotlib图

时间:2017-11-02 19:58:12

标签: python matplotlib

我想将matplotlib图保存为宽高比为1.25的png文件。我通过figsize参数指定了这个比率。但是当我使用选项bbox_inches = "tight"保存图形时,输出png的大小为553到396像素,比率为1.39。我想保留bbox_inches = "tight"选项以防止图边框中出现不必要的空白区域。我尝试了在stackoverflow上的类似帖子中提出的不同方法,但无法找到解决方案。

以下是示例代码:

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure(figsize = (3, 2.4), dpi = 150)
ax = plt.subplot(111)

for i in range(3):
    ax.plot(np.random.random(10), np.random.random(10), "o", label = i)
ax.legend(bbox_to_anchor=(1, 0.6), title = "Title")
plt.ylabel("Label")
plt.xlabel("Label")
plt.title("Title", loc = "left")
plt.savefig("test.png", format = "png", dpi = 150, bbox_inches = "tight")

这是输出png enter image description here

1 个答案:

答案 0 :(得分:1)

bbox_inches = "tight"明确地告诉matplotlib裁剪或扩展数字;因此,图形尺寸的任何设置都将丢失。因此,如果要控制图形大小,则无法使用此选项。

您有其他选择:

定义BBox

  • 定义您自己的bbox_inches,它确实具有所需的方面。 Bbox的尺寸为[[x0,y0],[x1,y1]]

    import matplotlib.transforms
    bbox = matplotlib.transforms.Bbox([[-0.2, -0.36], [3.45, 2.56]])
    plt.savefig("test.png", format = "png", dpi = 150,bbox_inches =bbox)
    

    enter image description here
    这个图像现在是547 x 438像素,因此具有1.2488的宽高比,尽可能接近1.25。

调整填充

  • 使用(3, 2.4)的原始图形大小并调整填充,这样所有元素都适合图形。这可以使用fig.subplots_adjust()完成。

    fig = plt.figure(figsize = (3, 2.4), dpi = 150)
    fig.subplots_adjust(top=0.89,
                        bottom=0.195,
                        left=0.21,
                        right=0.76)
    

    enter image description here
    此图片现在具有(3, 2.4)*150 = 450 x 360像素的预期大小。

  • 要自动确定子图参数,请同时查看以下问题:Creating figure with exact size and no padding (and legend outside the axes)

一般情况下,我建议您阅读this answer至"如何将图例放出情节。