我有三条线设置一个情节.我希望pic.png的大小为640x640像素.但我得到了800x800的照片.
plt.figure(figsize=(8, 8), dpi=80)
plt.scatter(X[:],Y[:])
plt.savefig('pic.png')
Run Code Online (Sandbox Code Playgroud)
顺便说一句我用面向对象的界面设置大小没有问题,但我需要使用pyplot样式.
以下代码在我的机器中生成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')
Run Code Online (Sandbox Code Playgroud)
转移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)
Run Code Online (Sandbox Code Playgroud)
我无法解释为什么会发生这种情况.
虽然Alberto的答案为您提供了正确的解决方法,但查看文档可以plt.savefig让您更好地了解此行为发生的原因.
dpi:[无| 标量> 0 | 'figure']每英寸点数的分辨率.如果为None,则默认为matplotlibrc文件中的值savefig.dpi.如果'figure',它会将dpi设置为数字的值.
简答:用于plt.savefig(..., dpi='figure')使用创建图形时设置的dpi值.
更长的答案:使用a 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')
Run Code Online (Sandbox Code Playgroud)明确给出你想要的dpi savefig:
plt.figure(figsize=(8, 8))
...
plt.savefig('pic.png', dpi=80)
Run Code Online (Sandbox Code Playgroud)在以下行编辑matplotlibrc文件:
#figure.dpi : 80 # figure dots per inch
Run Code Online (Sandbox Code Playgroud)
然后
plt.figure(figsize=(8, 8))
...
plt.savefig('pic.png') #dpi=None implicitly defaults to rc file value
Run Code Online (Sandbox Code Playgroud)