매우 높은 품질로 파이썬으로 이미지 저장


109

파이썬 플롯을 매우 높은 품질로 저장하려면 어떻게해야합니까?

즉, pdf 파일에 저장된 개체를 계속 확대하면 흐릿함이 없습니까?

또한 저장하기에 가장 좋은 모드는 무엇입니까?

png, eps? 아니면 다른? 컴파일 pdf을 엉망으로 만드는 숨겨진 숫자 가 있기 때문에 할 수 없습니다 Latexmk.

답변:


153

matplotlib라텍스 문서를 사용 하고 있고 좋은 수치를 얻으려면 eps로 저장하십시오. 특히, 이미지를 플롯하는 명령을 실행 한 후 다음과 같이 시도하십시오.

plt.savefig('destination_path.eps', format='eps')

eps 파일이 가장 잘 작동하고 dpi매개 변수가 문서에서 실제로보기 좋게 만드는 요소 라는 것을 발견했습니다 .

최신 정보:

저장하기 전에 Figure의 방향을 지정하려면 호출하기 전에 다음을 호출하기 만하면됩니다 plt.savefig. 그러나 플롯을 만든 후에 는 다음을 호출하십시오 (이름이라는 축을 사용하여 플로팅했다고 가정 ax).

ax.view_init(elev=elevation_angle, azim=azimuthal_angle)

여기서 elevation_angle이다 (도) 수 (수직 Z 축에서 아래쪽) 극각을 지정하고, azimuthal_angle지정 (z 축 주위) 방위각.

먼저 이미지를 플로팅 한 다음 회전하고 현재 각도 값이 실제 플롯 바로 아래 창 아래쪽에 나타나는 것을 확인하여 이러한 값을 결정하는 것이 가장 쉽다는 것을 알았습니다. x, y, z, 위치는 기본적으로 표시되지만 이미지를 클릭 + 드래그 + 회전하기 시작하면 두 각도로 대체됩니다.


@ spencerlon2 저장하기 전에 그림의 방향을 변경하려면 어떻게해야합니까?
더스틴

13
DPI 매개 변수가 필요한 이유는 무엇입니까? EPS는 벡터 형식이 아닙니까?
mkvoya

1
좋은 지적 - DPI는 SVG, PDF, EPS 등의 벡터 형식을 필요하지 않습니다
spencerlyon2

원하는 format='eps'경우 생략 할 수 있습니다 . 이 경우 형식은 파일 이름에서 유추됩니다.
timgeb

72

결과를 추가하려면 matplotlib도 사용하십시오.

.eps는 모든 텍스트를 굵게 만들고 투명도를 제거했습니다. .svg는 실제로 내 그래프처럼 보이는 고해상도 사진을 제공했습니다.

import matplotlib.pyplot as plt
fig, ax = plt.subplots()
# Do the plot code
fig.savefig('myimage.svg', format='svg', dpi=1200)

많은 과학 저널에서 이미지가 무엇인지에 따라 1200 / 600 / 300dpi의 이미지를 요구하기 때문에 1200dpi를 사용했습니다. GiMP 또는 Inkscape에서 원하는 dpi 및 형식으로 변환합니다.

편집 : .svg가 벡터 그래픽이고 "무한 해상도"를 갖기 때문에 분명히 dpi는 중요하지 않습니다.


2
DPI imshow(..)는 그림의 어딘가에서 사용할 때 매우 중요합니다 . 이러한 비트 맵은 SVG에 포함될 때 래스터 화됩니다. 기본 DPI를 사용하면 결과가 화면에서 보는 것보다 훨씬 나빠서 출판물에 적합하지 않습니다.
Evgeni Sergeev

또한 SVG 의 파일 크기를 줄이기 위해 Scour ( github.com/scour-project/scour )를 적극 권장 합니다. 가장 공격적인 설정에서 .svgz 압축 형식을 사용하면 파일 크기를 원본의 50 %-5 %로 줄일 수 있습니다.
grofte

8

좋아, 나는 spencerlyon2의 답변이 작동하는 것을 발견했지만 누군가가 그 한 줄로 무엇을 해야할지 모르는 경우를 대비하여 다음과 같이해야했습니다.

beingsaved = plt.figure()

# some scatters
plt.scatter(X_1_x, X_1_y)
plt.scatter(X_2_x, X_2_y)

beingsaved.savefig('destination_path.eps', format='eps', dpi=1000)

6

Seaborn 과 함께 작업하는 경우matplotlib 대신 플롯 과 같이 .png 이미지를 저장할 수 있습니다.

matrix개체 (pandas 또는 numpy)가 있고 히트 맵을 가져오고 싶다고 가정 해 보겠습니다 .

import seaborn as sb

image = sb.heatmap(matrix)   # this gets you the heatmap
image.figure.savefig("C:/Your/Path/ ... /your_image.png")   # this saves it

이 코드는 최신 버전의 seaborn과 호환됩니다. stackoverflow 주변의 다른 코드는 이전 버전에서만 작동했습니다.

내가 좋아하는 또 다른 방법은 이것입니다. 다음 이미지의 크기를 다음과 같이 설정합니다.

plt.subplots(figsize=(15,15))

그런 다음 나중에 콘솔에 출력을 플로팅하여 원하는 곳에 복사하여 붙여 넣을 수 있습니다. (seaborn은 matplotlib 위에 빌드되었으므로 문제가 없습니다.)


5

다음을 사용하여 1920x1080 (또는 1080p) 인 Figure로 저장할 수 있습니다.

fig = plt.figure(figsize=(19.20,10.80))

훨씬 더 높거나 낮게 갈 수도 있습니다. 위의 솔루션은 인쇄에 적합하지만 요즘에는 생성 된 이미지가 PNG / JPG로 들어가거나 와이드 스크린 형식으로 나타나기를 원합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.