在 matplotlib 中只保存没有轴、标签和填充的线

Save only line without axes, labels and padding in matplotlib

我想将 matplotlib 折线图保存为纵横比 3:1 且没有轴或标签的透明 png 图像。我需要图表的线条直接在图像的边缘开始和结束(没有任何填充)。

我发现了几个类似的话题,e。 G。 or Removing white space around a saved image in matplotlib,但是这两个建议都没有帮助。

这是我的代码:

import matplotlib.pyplot as plt

x = np.arange(1, 10)
y = np.arange(51, 60)

plt.gca().set_axis_off()
plt.subplots_adjust(top=1, bottom=0, right=1, left=0, hspace=0, wspace=0)
plt.margins(0, 0)
plt.gca().xaxis.set_major_locator(plt.NullLocator())
plt.gca().yaxis.set_major_locator(plt.NullLocator())

fig = plt.figure(figsize=(9,3))
ax = fig.add_axes([0, 0, 1, 1], frameon=False)
ax.set_axis_off()

ax.plot(x, y)
# plt.savefig("result.png", format="png", transparent=True, `bbox_inches="tight", pad_inches=0)  # Result image is empty.
plt.savefig("result.png", format="png", transparent=True)
plt.show()

仍然,结果图像中有一些填充(有白色背景显示填充,但实际上图像是透明的):

有什么方法可以实现没有填充的图表吗?

这是基于您添加的问题之一的解决方案:

import matplotlib.pyplot as plt
import numpy as np
import os

x = np.arange(1, 10)
y = np.arange(51, 60)

plt.figure(figsize=(9,3))
plt.plot(x,y)
plt.gca().set_axis_off()
plt.subplots_adjust(top = 1, bottom = 0, right = 1, left = 0,
            hspace = 0, wspace = 0)
plt.margins(0,0)
plt.savefig("myfig.png")

#os.system('convert myfig.png -trim myfig.png') #<- a quick workaround if you are on mac or Linux.
plt.show()

输出