Matplotlib 不直接处理像素,而是处理物理尺寸和 DPI。如果你想显示一定像素大小的图形,你需要知道你的显示器的DPI。例如这个链接 http://www.infobyip.com/detectmonitordpi.php将为您检测到。
如果您有 3841x7195 像素的图像,那么您的显示器不太可能那么大,因此您将无法显示该尺寸的图形(matplotlib 要求图形适合屏幕,如果您要求尺寸太大会缩小到屏幕尺寸)。假设您想要一张 800x800 像素的图像作为示例。以下是如何在我的显示器中显示 800x800 像素图像(my_dpi=96
):
plt.figure(figsize=(800/my_dpi, 800/my_dpi), dpi=my_dpi)
因此,您基本上只需将尺寸(以英寸为单位)除以 DPI 即可。
如果你想保存特定尺寸的图形,那就另当别论了。屏幕 DPI 不再那么重要(除非您要求的数字不适合屏幕)。使用 800x800 像素图形的相同示例,我们可以使用以下命令将其保存为不同的分辨率dpi
的关键字savefig
。要将其保存为与屏幕相同的分辨率,只需使用相同的 dpi:
plt.savefig('my_fig.png', dpi=my_dpi)
要将其保存为 8000x8000 像素图像,请使用 10 倍大的 dpi:
plt.savefig('my_fig.png', dpi=my_dpi * 10)
请注意,并非所有后端都支持 DPI 的设置。这里使用了 PNG 后端,但 pdf 和 ps 后端将以不同的方式实现尺寸。此外,更改 DPI 和大小也会影响字体大小等内容。较大的 DPI 将保持字体和元素的相对大小相同,但如果您想要较小的字体来显示较大的图形,则需要增加物理尺寸而不是 DPI。
回到您的示例,如果您想保存 3841 x 7195 像素的图像,您可以执行以下操作:
plt.figure(figsize=(3.841, 7.195), dpi=100)
( your code ...)
plt.savefig('myfig.png', dpi=1000)
请注意,我使用 100 的图形 dpi 来适应大多数屏幕,但保存为dpi=1000
以达到所需的分辨率。在我的系统中,这会生成一个 3840x7190 像素的 png —— 似乎保存的 DPI 总是比所选值小 0.02 像素/英寸,这将对大图像尺寸产生(小)影响。对此进行更多讨论here https://stackoverflow.com/questions/8775622/exact-figure-size-in-matplotlib-with-title-axis-labels.