gpt4 book ai didi

matplotlib - dpi 与图形大小的关系

转载 作者:行者123 更新时间:2023-12-03 08:36:12 28 4
gpt4 key购买 nike

我使用 matplotlib 创建了一个图形,但我已经意识到绘图轴和绘制的线被缩小了。
enter image description here

阅读本文 earlier discussion thread ,它解释了如何设置图形大小。
fig, ax = plt.subplots()fig.set_size_inches(3, 1.5)plt.savefig(file.jpeg, edgecolor='black', dpi=400, facecolor='black', transparent=True)
使用上面的代码(为简洁起见删除了其他配置),我确实得到了一个带有 1200 X 600 的结果图像文件所需的尺寸(我们也应该说分辨率吗?)和所需的文件大小。

投影图像以一种不寻常的方式被放大,例如注释被放大。虽然我可以在轴上设置标签的大小,但由于底部和右侧的脊线很大,绘制的线也很大,因此图形看起来与比例不成比例。

因此,问题是,哪些配置出了问题?

最佳答案

图尺寸 ( figsize ) 以英寸为单位确定图形的大小。这给出了轴(和其他元素)在图形内的空间量。默认图形大小为 (6.4, 4.8) matplotlib 2 中的英寸。更大的图形尺寸将允许显示更长的文本、更多的轴或更多的刻度标签。

每英寸点数 (dpi) 确定图形包含多少像素。 matplotlib 中的默认 dpi 是 100。一个数字 figsize=(w,h)会有

px, py = w*dpi, h*dpi  # pixels
# e.g.
# 6.4 inches * 100 dpi = 640 pixels

因此,为了获得具有例如像素大小的图形 (1200,600)您可以选择图形大小和 dpi 的几种组合,例如
figsize=(15,7.5), dpi= 80
figsize=(12,6) , dpi=100
figsize=( 8,4) , dpi=150
figsize=( 6,3) , dpi=200
etc.

现在,有什么区别?这是由图中元素的大小决定的。大多数元素(如线条、标记、文本)的大小都以磅为单位。
Matplotlib 数字使用 每英寸点数 (ppi) 72. 粗细为 1 点的线将是 1./72。英寸宽。字体大小为 12 磅的文本将为 12./72。英寸高。

当然如果你改变以英寸为单位的图形大小,点不会改变,所以以英寸为单位的更大的图形仍然具有相同的元素大小。 因此,更改图形大小就像拿一张不同大小的纸一样。这样做当然不会改变用同一支笔绘制的线条的宽度。

另一方面,更改 dpi 会缩放这些元素。在 72 dpi 时,1 磅大小的线是一个像素强。在 144 dpi 时,这条线的强度为 2 像素。 因此,较大的 dpi 将起到放大镜的作用。所有元素都由镜头的放大倍数缩放。

下图左侧显示了恒定图形大小和不同 dpi 的比较。在右侧,您会看到恒定的 dpi 和不同的图形大小。每行中的图形具有相同的像素大小。

enter image description here

重现代码:
import matplotlib.pyplot as plt
%matplotlib inline

def plot(fs,dpi):
fig, ax=plt.subplots(figsize=fs, dpi=dpi)
ax.set_title("Figsize: {}, dpi: {}".format(fs,dpi))
ax.plot([2,4,1,5], label="Label")
ax.legend()

figsize=(2,2)
for i in range(1,4):
plot(figsize, i*72)

dpi=72
for i in [2,4,6]:
plot((i,i), dpi)

关于matplotlib - dpi 与图形大小的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47633546/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com