programing

고해상도 그래프를 그리는 방법

mytipbox 2023. 6. 7. 23:53
반응형

고해상도 그래프를 그리는 방법

저는 실험 결과를 그리기 위해 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()

내가 찾고 있는 항목의 예제 그래프: 예제 그래프

를 사용하여 이미지 파일로 내보낼 수 있습니다.

plt.savefig('filename.png')

또한 다음을 지정할 수 있습니다.dpi일부 스칼라 값에 대한 인수, 예:

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

모든 것보다 먼저 사용plt.plot...그리고 마지막으로 사용합니다.

저처럼 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개의 adpi 값을 사용해도 가까이에서 볼 때 여전히 흐릿한 이미지가 생성됩니다.

덜 성공적인 테스트 #2:plt.savefig('filename.pdf')

Google 슬라이드와 마찬가지로 Microsoft Office Professional Plus 2016(따라서 파워포인트 없음)에서는 이 기능을 열 수 없습니다.

덜 성공적인 테스트 #3:plt.savefig('filename.svg')

또한 위와 같은 문제로 파워포인트 또는 Google 슬라이드에서도 열 수 없습니다.

덜 성공적인 테스트 #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에서 출력이 발생하지 않았습니다.

그래프를 svg로 저장하여 무손실 품질을 얻을 수 있습니다.

import matplotlib.pylab as plt

x = range(10)

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

그래프를 저장하는 경우:

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

사용할 때 그래프를 표시하는 데 사용plt.show():

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

맨 위에 추가하기만 하면 됩니다.

for() 루프의 끝에서 다음을 사용할 수 있습니다.savefig()plt.show() 대신 기능하고 그림의 이름, dpi 및 형식을 설정합니다.

예를 들어 1000dpi 및 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)

내 생각에, 그렇게 하는 가장 좋은 방법은 다음을 사용하는 것입니다.%matplotlib notebook마법의 기능

위의 모든 방법을 시도해 보았는데 dpi가 증가하는 단점은 그림 크기나 플롯 윈도우 크기가 증가한다는 것인데, 이는 바람직하지 않습니다.

만약 당신이 dpi를 조정하지 않고 당신의 수치 크기 내에서 최고의 해상도를 얻고 싶다면, 매직 기능을 이용하세요.

또한 그림의 단추를 클릭하는 것만으로 그림의 교호작용을 해제할 수 있습니다.

언급URL : https://stackoverflow.com/questions/39870642/how-to-plot-a-high-resolution-graph

반응형