Matplotlib-如何绘制高分辨率图形?

我使用 matplotlib 绘制了一些实验结果(在这里讨论过: 对文件进行循环和绘图。然而,通过点击图像右键来保存图片会产生非常糟糕的质量/低分辨率的图像。

from glob import glob
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl


# loop over all files in the current directory ending with .txt
for fname in glob("./*.txt"):
# read file, skip header (1 line) and unpack into 3 variables
WL, ABS, T = np.genfromtxt(fname, skip_header=1, unpack=True)


# first plot
plt.plot(WL, T, label='BN', color='blue')


plt.xlabel('Wavelength (nm)')
plt.xlim(200,1000)
plt.ylim(0,100)
plt.ylabel('Transmittance, %')
mpl.rcParams.update({'font.size': 14})
#plt.legend(loc='lower center')
plt.title('')
plt.show()
plt.clf()




# second plot
plt.plot(WL, ABS, label='BN', color='red')
plt.xlabel('Wavelength (nm)')
plt.xlim(200,1000)
plt.ylabel('Absorbance, A')
mpl.rcParams.update({'font.size': 14})
#plt.legend()
plt.title('')
plt.show()
plt.clf()

我正在寻找的示例图: 示例图示例图示例图示例图

300032 次浏览

您可以使用 savefig()导出到图像文件:

plt.savefig('filename.png')

此外,还可以将 dpi参数指定为某个标量值,例如:

plt.savefig('filename.png', dpi=300)

您可以将图表保存为 svg,以获得无损的质量:

import matplotlib.pylab as plt


x = range(10)


plt.figure()
plt.plot(x,x)
plt.savefig("graph.svg")

在所有的 plt.plot...之前使用 plt.figure(dpi=1200),最后使用 plt.savefig(...)

()循环的末尾,您可以使用 savefig()函数而不是 Show (),并设置图形的名称、 dpi 和格式。

例如,1000 dpi 和 ps 格式的图片质量很好,如果你想把每张图片保存在 ./文件夹中,并命名为“ Sample1.ep”、“ Sample2.ep”等,你可以添加以下代码:

for fname in glob("./*.txt"):
# Your previous code goes here
[...]


plt.savefig("./{}.eps".format(fname), bbox_inches='tight', format='eps', dpi=1000)

对于那些在试图从 matplotlib 中保存高分辨率图像时发现这个问题的未来读者,我已经尝试了上面和其他地方的一些答案,并将它们总结在这里。

最佳结果 : plt.savefig('filename.pdf')

然后在命令行中将这个 pdf 转换成 png,这样你就可以在 Powerpoint 中使用它了:

pdftoppm -png -r 300 filename.pdf filename

或者简单地打开 pdf,剪切到你在 Adobe 中需要的图片,保存为 png 并导入图片到 Powerpoint

不太成功的测试 # 1 : plt.savefig('filename.png', dpi=300)

这样确实可以保存比正常分辨率高一点的图像,但是对于发布或某些演示文稿来说,这个分辨率还不够高。使用的 dpi 值高达2000仍然产生模糊的图像时,查看特写。

不太成功的测试 # 2 : plt.savefig('filename.pdf')

这不能在 MicrosoftOfficeProfessionalPlus 2016中打开(因此没有幻灯片) ,与谷歌幻灯片一样。

不太成功的测试 # 3 : plt.savefig('filename.svg')

这也不能在 Powerpoint 或谷歌幻灯片打开,与上面相同的问题。

不太成功的测试 # 4 : plt.savefig('filename.pdf')

然后在命令行上转换为 png:

convert -density 300 filename.pdf filename.png

但是如果近距离观察的话,这个还是太模糊了。

不太成功的测试 # 5 : plt.savefig('filename.pdf')

并在 GIMP 中打开,并作为高质量的 png 导出(将文件大小从 ~ 100KB 增加到 ~ 75MB)

不太成功的测试 # 6 : plt.savefig('filename.pdf')

然后在命令行上转换为 jpeg:

pdfimages -j filename.pdf filename

这不会产生任何错误,但即使在改变了几个参数之后,也不会在 Ubuntu 上产生输出。

为了保存图表:

matplotlib.rcParams['savefig.dpi'] = 300

用于在使用 plt.show()时显示图形:

matplotlib.rcParams["figure.dpi"] = 100

把它们放在最上面

在我看来, 最好的办法,就是使用 %matplotlib notebook的神奇功能。

我已经尝试了以上所有的方法,但是增加 dpi 的缺点是图形大小或者说图形窗口大小会随之增加,这是不需要的。

如果你想在不调整 dpi 的情况下获得最佳的图形尺寸分辨率,那么就使用这个神奇的函数吧。

你也可以关闭交互的情节,只需点击按钮就可以了。