使用matplotlib / pyplot绘制内容并仅保存绘图(居中,具有相同的纵横比且没有轴或边框)

问题描述 投票:1回答:2

我想将生成的绘图图像保存到文件中并编写以下MCVE:

import matplotlib.pyplot as plt

plt.rcParams["axes.facecolor"] = "red"
plt.rcParams["savefig.facecolor"] = "red"
plt.rcParams["savefig.bbox"] = "tight"
plt.rcParams["savefig.pad_inches"] = 0

plt.plot([0, 1], [0, 0], "b-", linewidth="10")
plt.plot([1, 1], [0, 1], "b-", linewidth="10")
plt.plot([1, 0], [1, 1], "b-", linewidth="10")
plt.plot([0, 0], [1, 0], "b-", linewidth="10")

#plt.axis("equal")
#plt.axis("off")
plt.savefig("test.png")

1


plt.axis("equal")
#plt.axis("off")

3


#plt.axis("equal")
plt.axis("off")

2


plt.axis("equal")
plt.axis("off")

4


我发现了bboxpad_inches。但是,它仍然不完美。轴似乎是隐藏的,而不是完全关闭 - 因此绘图不会居中。另外,我想我甚至需要设置相等比例的轴或矩形不是正方形?

我想要的是

5

要么

6

python image matplotlib plot
2个回答
1
投票

plt.rcParams["savefig.bbox"] = "tight"自动调整图形周围的填充。这似乎是不受欢迎的。离开并创建一个没有边距的正方形图形(plt.subplots_adjust(0,0,1,1))将允许轴占据图中的所有空间。因此,不再需要具体设置方面,但当然对于可能仍然有意义的不同情况。

import matplotlib.pyplot as plt

plt.rcParams["axes.facecolor"] = "red"
plt.rcParams["savefig.facecolor"] = "red"

plt.figure(figsize=(4,4))
plt.subplots_adjust(0,0,1,1)
plt.plot([0, 1, 1, 0,0], [0, 0,1,1,0], "b-", linewidth="10", solid_joinstyle="miter")

#plt.gca().set_aspect("equal",adjustable="box" ) # <- not needed
plt.axis("off")
plt.savefig("test.png")
plt.show()

enter image description here

要获得没有红色边框的数字,可以将数据边距设置为0%(plt.margins(0));但是,因为线是半切,所以将其线宽加倍以获得相同的蓝色边框是有意义的。

import matplotlib.pyplot as plt

plt.rcParams["axes.facecolor"] = "red"
plt.rcParams["savefig.facecolor"] = "red"

plt.figure(figsize=(4,4))
plt.subplots_adjust(0,0,1,1)
plt.plot([0, 1, 1, 0,0], [0, 0,1,1,0], "b-", linewidth=20, solid_joinstyle="miter")

#plt.gca().set_aspect("equal",adjustable="box" ) # <- not needed
plt.axis("off")
plt.margins(0.0)
plt.savefig("test.png")
plt.show()

enter image description here


1
投票

您可以定义方形的图形,并使用tight_layout()自动压缩填充。

import matplotlib.pyplot as plt

# Creates a figure object of size 6x6 inches
fig = plt.figure(figsize=(6,6))

plt.rcParams["axes.facecolor"] = "red"
plt.rcParams["savefig.facecolor"] = "red"
plt.rcParams["savefig.bbox"] = "tight"
plt.rcParams["savefig.pad_inches"] = 0

plt.plot([0, 1], [0, 0], "b-", linewidth="10")
plt.plot([1, 1], [0, 1], "b-", linewidth="10")
plt.plot([1, 0], [1, 1], "b-", linewidth="10")
plt.plot([0, 0], [1, 0], "b-", linewidth="10")

plt.axis("equal")
plt.axis("off")
fig.tight_layout()
fig.savefig("test.png")