我有三行设置情节。我希望pic.png的大小为640x640像素。但我得到了800x800的照片。
plt.figure(figsize=(8, 8), dpi=80)
plt.scatter(X[:],Y[:])
plt.savefig('pic.png')
BTW我使用面向对象的界面设置大小没有问题,但我需要使用pyplot样式。
答案 0 :(得分:5)
以下代码在我的机器中生成576x576 PNG图像:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(10)
y = np.random.rand(10)
plt.figure(figsize=(8, 8), dpi=80)
plt.scatter(x, y)
plt.savefig('pic.png')
正确将dpi=80
转移到plt.savefig
来电会产生640x640的PNG图像:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(10)
y = np.random.rand(10)
plt.figure(figsize=(8, 8))
plt.scatter(x, y)
plt.savefig('pic.png', dpi=80)
我无法解释为什么会发生这种情况。
答案 1 :(得分:5)
虽然Alberto的答案为您提供了正确的解决方法,但查看documentation for plt.savefig
可让您更好地了解此行为发生的原因。
dpi:[无|标量> 0 | '数字'] 分辨率以每英寸点数表示。如果为None,则默认为matplotlibrc文件中的值savefig.dpi。如果是“数字”,它会将dpi设置为数字的值。
简答:使用plt.savefig(..., dpi='figure')
来使用创建图表时设置的dpi值。
更长的答案: plt.figure(figsize=(8,8), dpi=80)
,您可以通过以下方式获得640x640的数字:
将dpi='figure'
关键字参数传递给plt.savefig
:
plt.figure(figsize=(8, 8), dpi=80)
...
plt.savefig('pic.png', dpi='figure')
明确提供您想要的dpi savefig
:
plt.figure(figsize=(8, 8))
...
plt.savefig('pic.png', dpi=80)
在以下行修改matplotlibrc file:
#figure.dpi : 80 # figure dots per inch
然后
plt.figure(figsize=(8, 8))
...
plt.savefig('pic.png') #dpi=None implicitly defaults to rc file value