Użyłem matplotlib do wykreślania niektórych wyników eksperymentów (omówione tutaj: Zapętlanie po plikach i kreślenie . Jednak zapisanie obrazu poprzez kliknięcie prawym przyciskiem myszy daje obrazy bardzo złej jakości / niskiej rozdzielczości.
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()
Przykładowy wykres tego, czego szukam: przykładowy wykres
python
matplotlib
esilik
źródło
źródło
plt.savefig(fname + 'Graph1.png')
iplt.savefig(fname + 'Graph2.png')
użyj
plt.figure(dpi=1200)
przed każdym użyciemplt.plot...
i na koniecplt.savefig(...
zobacz: http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.figure i http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.savefigźródło
Możesz zapisać swój wykres jako svg, aby uzyskać bezstratną jakość:
import matplotlib.pylab as plt x = range(10) plt.figure() plt.plot(x,x) plt.savefig("graph.svg")
źródło
plt.savefig("graph.pdf")
który również jest bezstratnyDla przyszłych czytelników, którzy znaleźli to pytanie, próbując zapisać obrazy o wysokiej rozdzielczości z matplotlib tak, jak ja, wypróbowałem niektóre odpowiedzi powyżej i gdzie indziej i podsumowałem je tutaj.
Najlepszy wynik :
plt.savefig('filename.pdf')
a następnie przekonwertuj ten plik PDF na png w wierszu poleceń, aby móc go używać w programie PowerPoint:
pdftoppm -png -r 300 filename.pdf filename
LUB po prostu otwierając plik PDF i przycinając do potrzebnego obrazu w Adobe, zapisując jako png i importując obraz do programu PowerPoint
Mniej udany test nr 1 :
plt.savefig('filename.png', dpi=300)
W ten sposób obraz jest nieco wyższy niż normalna rozdzielczość, ale nie jest wystarczająco wysoki do publikacji lub niektórych prezentacji. Korzystanie z wartości dpi do 2000 nadal powodowało rozmycie obrazu przy oglądaniu z bliska.
Mniej udany test nr 2 :
plt.savefig('filename.pdf')
Nie można tego otworzyć w Microsoft Office Professional Plus 2016 (więc nie w programie PowerPoint), tak samo z Google Slides.
Mniej udany test nr 3 :
plt.savefig('filename.svg')
Nie można tego również otworzyć w programie PowerPoint lub Prezentacjach Google, z tym samym problemem co powyżej.
Mniej udany test nr 4 :
plt.savefig('filename.pdf')
a następnie konwertowanie do png w linii poleceń:
convert -density 300 filename.pdf filename.png
ale widok z bliska jest nadal zbyt rozmyty.
Mniej udany test nr 5 :
plt.savefig('filename.pdf')
i otwieranie w GIMP i eksportowanie jako wysokiej jakości png (zwiększono rozmiar pliku z ~ 100 KB do ~ 75 MB)
Mniej udany test nr 6 :
plt.savefig('filename.pdf')
a następnie konwertowanie do formatu jpeg w wierszu poleceń:
pdfimages -j filename.pdf filename
Nie spowodowało to żadnych błędów, ale nie wygenerowało danych wyjściowych w systemie Ubuntu nawet po zmianie kilku parametrów.
źródło
.pdf
była dla mnie również najlepsza. Prawie doskonała jakość powiększona do końca, tak jak 4k. Zamiast konwertować w linii poleceń, wystarczy zrobić zrzut ekranu pliku .pdf i zapisać go w formacie png.Aby zapisać wykres:
matplotlib.rcParams['savefig.dpi'] = 300
Do wyświetlania wykresu podczas używania
plt.show()
:matplotlib.rcParams["figure.dpi"] = 100
Po prostu dodaj je u góry
źródło
Na końcu pętli for () możesz użyć
savefig()
funkcji zamiast plt.show () i ustawić nazwę, dpi i format figury.Np. Format 1000 dpi i eps są całkiem niezłej jakości, a jeśli chcesz zapisać każde zdjęcie w folderze ./ o nazwach „Sample1.eps”, „Sample2.eps” itp., Możesz po prostu dodać następujący kod:
for fname in glob("./*.txt"): # Your previous code goes here [...] plt.savefig("./{}.eps".format(fname), bbox_inches='tight', format='eps', dpi=1000)
źródło