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

Пример графика того, что я ищу: примерный график

Ответ 1

Вы можете использовать savefig() для экспорта в файл изображения:

plt.savefig('filename.png')

Кроме того, вы можете указать аргумент dpi для некоторого скалярного значения, например:

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

Ответ 2

Вы можете сохранить свой график как svg за качество без потерь:

import matplotlib.pylab as plt

x = range(10)

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

Ответ 4

В конце цикла for() вы можете использовать функцию savefig() вместо plt.show() и задать имя, dpi и формат вашей фигуры.

например. 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)