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

时间:2016-10-05 09:45:40

标签: python matplotlib

我已经使用matplotlib绘制了一些实验结果(在此处对此进行了讨论:Looping over files and plotting。但是,通过单击图像右侧保存图片会产生非常糟糕的质量/低分辨率图像。

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()

我正在寻找的示例图表:example graph

6 个答案:

答案 0 :(得分:48)

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

plt.savefig('filename.png')

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

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

答案 1 :(得分:13)

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

import matplotlib.pylab as plt

x = range(10)

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

答案 2 :(得分:11)

plt.figure(dpi=1200)之前使用plt.plot...,最后使用plt.savefig(...,请参阅:http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.figurehttp://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.savefig

答案 3 :(得分:6)

对于将来尝试从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)

这确实将图像保存为比正常分辨率高一点的图像,但是对于发布或某些演示文稿而言,图像的高度不够。当近距离观看时,使用高达2000的dpi值仍会产生模糊的图像。

测试#2失败plt.savefig('filename.pdf')

无法与Microsoft幻灯片一样在Microsoft Office Professional Plus 2016中打开(因此没有PowerPoint)。

测试#3失败plt.savefig('filename.svg')

此问题也无法在PowerPoint或Google幻灯片中打开,并且存在与上述相同的问题。

#4测试失败plt.savefig('filename.pdf')

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

convert -density 300 filename.pdf filename.png

但是当近距离观察时仍然太模糊了。

测试#5失败plt.savefig('filename.pdf')

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

测试#6失败plt.savefig('filename.pdf')

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

pdfimages -j filename.pdf filename

这不会产生任何错误,但即使更改了多个参数,也没有在Ubuntu上产生输出。

答案 4 :(得分:2)

用于保存图形:

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

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

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

只需将它们添加到顶部

答案 5 :(得分:0)

for()循环结束时,您可以使用savefig()函数代替 plt.show()并设置名称dpi和你的形象的格式。

E.g。 1000 dpi和eps格式是非常好的质量,如果你想保存文件夹 ./ 的每张图片,名称为“Sample1.eps”,“Sample2.eps”等,你可以添加以下代码:

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

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