Matplotlib绘图时如何设置图像大小和分辨率
Matplotlib绘图时如何设置图像大小和分辨率
在使用Matplotlib进行绘图时,如何设置图像的大小和分辨率是一个常见且重要的问题。本文将详细解释绘图图像尺寸、保存图像尺寸、显示图像尺寸和打印图像尺寸之间的关系,并提供具体的设置建议。
绘图图像的尺寸
在Matplotlib中绘制图像时,可以通过Figure
类的figsize
和dpi
参数来控制图像的大小和分辨率。
figsize
参数提供一个float 2元元组(width, height)
,默认单位是英寸(inches),定义了图像的物理尺寸。dpi
参数提供一个整数,表示图像的分辨率,即每英寸距离上的点数(Dots per inches)。这个点实际是一个很小的正方形方块,对应打印时的dot、屏幕显示时的pixel,以及图像尺寸中的像素。
在Windows中,通常用像素来表示图像的大小。以宽度为例,像素的计算公式为:
width * dpi
下面是一个使用Matplotlib绘制图像并保存为PNG文件的示例代码:
import numpy as np
from matplotlib.backends.backend_agg import FigureCanvasAgg
from matplotlib.figure import Figure
from numpy import math
fig = Figure(figsize=(4, 2),
dpi=96,
facecolor=(249 / 256, 244 / 256, 206 / 256),
edgecolor=(82 / 256, 101 / 256, 155 / 256),
frameon=True,
)
canvas = FigureCanvasAgg(fig)
fca = (249 / 256, 244 / 256, 206 / 256)
fcb = (138 / 256, 176 / 256, 209 / 256)
ax_a = fig.add_subplot(111, facecolor=fcb)
x = np.arange(0, 2 * math.pi, 0.001)
y = np.sin(x)
ax_a.plot(x, y, color='r')
s, (width, height) = canvas.print_to_buffer()
from PIL import Image
im = Image.frombytes("RGBA", (width, height), s)
im.show()
canvas.print_figure('DPI_PPI.jpg')
上面的代码绘制了一个width = 4 inches, height=2 inches, dpi = 96
的图像。黄色的矩形表示figure的大小,蓝色的是axes。
在PS中查看该图像的大小:
96 * 4 = 384
96 * 2 = 192
这就是图像像素大小的由来。
打印尺寸
如果按照100%比例打印,得到的图片大小为:
4 * 2.54 = 10.16 cm
2 * 2.54 = 5.08 cm
屏幕显示尺寸
在屏幕上查看这幅图像时,实际显示的大小与屏幕的分辨率(PPI)和显示比例(scale)有关。
假设屏幕的PPI也是96,显示比例是100%,这幅图像在屏幕上占据的空间为:
10.16 cm * 5.08 cm
如果屏幕的分辨率是72 PPI,显示比例是100%,这幅图像在屏幕上占据的空间为:
10.16 * (96 / 72)
5.08 * (96 / 72)
假设图像的显示比例是scale,换算公式为:
width * (dpi / ppi) * scale
height * (dpi / ppi) * scale
设置Figure尺寸的建议
根据图像的用途,可以采用以下建议:
- 仅用于屏幕展示:将dpi设置为96(目前一般屏幕的分辨率),width和height默认即可。在大屏幕上展示时,可以根据屏幕的实际尺寸按比例设置。
- 用于一般打印输出:将dpi设置为200-300,width和height尺寸根据文章的排版格式设置,例如A4纵向一栏时,width < 15cm,height < 22cm。
- 用于高质量印刷出版:根据出版商的要求设置。
绘图元素的尺寸
在绘图时,绘图元素的大小设置也需要注意。以线宽为例,Matplotlib默认参数是dpi = 72,线宽是1.5 points。在Matplotlib中,每英寸点数(ppi)为72,因此1 point宽的线将是1/72英寸宽,12点的文本将是12/72英寸高,即0.3527 mm。这是一个绝对单位,与cm、mm等单位类似。
如果你将figure的dpi设置为144,在一个point宽中将有两个像素pixel,图像100%比例在屏幕上显示时看起来就有默认的两倍宽。
总结
绘图图像尺寸、保存图像尺寸、显示图像尺寸和打印图像尺寸之间的逻辑关系如下图所示: