如何为散点图设置大小

13

我有三行代码来设置图表,希望图片pic.png的尺寸为640x640像素。但是实际得到的图片尺寸为800x800像素。

plt.figure(figsize=(8, 8), dpi=80)
plt.scatter(X[:],Y[:])
plt.savefig('pic.png')

顺便说一句,我使用面向对象的接口设置大小没有问题,但我需要使用pyplot风格。

2个回答

25

以下代码在我的机器上生成一个 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)

我无法解释为什么会发生这种情况。


7
虽然Alberto的回答给出了正确的解决方法,但查看plt.savefig文档可以更好地了解为什么会出现这种行为。

dpi:[无|标量>0|“figure”]每英寸点数的分辨率。如果为None,则默认为matplotlibrc文件中savefig.dpi的值。如果是“figure”,则将dpi设置为图形的值。

简短回答:使用plt.savefig(...,dpi ='figure')使用在创建图形时设置的dpi值。

较长回答:使用plt.figure(figsize =(8,8),dpi = 80),您可以以以下方式获得640x640的图形:

  1. Pass the dpi='figure' keyword argument to plt.savefig:

    plt.figure(figsize=(8, 8), dpi=80)
    ...
    plt.savefig('pic.png', dpi='figure')
    
  2. Explicitly give the dpi you want to savefig:

    plt.figure(figsize=(8, 8))
    ...
    plt.savefig('pic.png', dpi=80)
    
  3. Edit your matplotlibrc file at the following line:

    #figure.dpi       : 80      # figure dots per inch
    

    then

    plt.figure(figsize=(8, 8))
    ...
    plt.savefig('pic.png') #dpi=None implicitly defaults to rc file value
    

我早有所料。我猜测Matplotlib维护者对此行为有充分的理由——否则我会将“figure”设置为默认值。不过还是感谢您提供的信息! - Alicia Garcia-Raboso

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接