2012-05-21 1 views
3

matplotlib에서 나는 LineCollection을 사용하여 카운티의 경계가있는 국가를 그려서 색상을 지정합니다. 그림을 PDF 파일로 저장할 때 :matplotlib에서 pdf 그림 파일의 크기 줄이기

fig.savefig('filename.pdf',dpi=300) 

그림 크기가 상당히 큽니다. 그러나 PNG 파일로 저장에 :

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

를 다음 파일이 작은 명령 convert 리눅스를 사용하여 PDF로 변환. 나는 dpi를 줄이려고했지만 PDF 파일 크기는 변경하지 않았습니다. 그림이 matplotlib에서 더 작은 pdf 파일로 직접 저장할 수있는 방법이 있습니까?

+0

이 블로그 게시물을 발견했습니다. http://www.astrobetter.com/blog/2014/01/17/slim-down-your-bloated-graphics/ –

답변

8

PDF는 모든 벡터 정보를 포함하고 있기 때문에 더 큽니다. PNG를 저장하면 래스터 화 된 이미지가 생성됩니다. 귀하의 경우, 직접 플롯을 래스터로 작은 PDF를 생성 할 수 있음을 보인다

여기
plt.plot(x, y, 'r-', rasterized=True) 

, x, y 어떤 음모 좌표입니다. 효과를 얻으려면 기본적으로 추가 키워드 인수 raterized을 사용해야합니다.

+1

감사합니다. 나는 Line = LineCollection (...), lines.set_rasterized (True)를 사용하여 시도했다. 이렇게하면 그림 크기가 상당히 줄어들지 만 (3MB에서 800KB), PNG로 변환 된 파일 (400KB)보다 여전히 더 큽니다. – imsc

+0

그림을 만들 때 그림의 dpi를 낮은 값으로 설정하려고 했습니까? 예 : fig = plt.figure (dpi = 100) –

+0

예. 두 pdf 파일 (직접 저장되고 png에서 변환 됨)은 dpi = 300으로 저장됩니다. dpi = 100을 사용하면 그림 크기가 줄어들지 만 품질은 png보다 낮아집니다. – imsc

0

"rasterized = True"를 사용하면 이미지가 png 형식과 비슷하게 효과적으로 저장됩니다. 확대하면 흐린 픽셀이 보입니다.

수치를 높이려면 데이터에서 샘플을 만들고 플롯을 만드십시오. pdf 파일 크기는 대략 기억해야 할 데이터 포인트의 양입니다.