2012-04-12 5 views
6

이 문제는 다른 사람을 찾을 수 없습니다. matplotlib에서 show() 또는 savefig()를 사용하여 플롯을 볼 수 있습니다. 이들은 약간 다른 이미지를 생성합니다. 제 경우에는 savefig() 이미지가 더럽고 이해하기가 더 어렵습니다. 내 검시관의 삶을 편하게 만들어야 하니까.matplotlib, savefig : DPI 설정이 무시됩니다.

show()와 일치하도록 DPI 크기를 설정하는 것이 좋습니다. 나는 시도했다 :

- 직접 matplotlib.rcParams [ 'savefig.dpi'] = 80

와> 설정 savefig.dpi -> 설정 savefig.dpi 직접 ~/.matplotlib/matplotlibrc있다.

-> 내 rc 파일을 CWD로 이동.

-> 마지막 savefig 사용 ('image.pdf'를 dpi = 80)

I는 속성 실제로 설정지고 있는지 확인할 수

; 그러나 설정은 savefig()에 의해 무시됩니다. 아무도 이것으로 도울 수 있습니까?

(간체) 코드 :

plt.bar(ind, functimes, yerr=stddev, bottom=0, width=barWidth, align='center', color='b') 

ax = plt.gca() 
ax.legend(barRcts, barLegend) 
plt.title("Function Call Overhead") 
plt.xlabel("Function ID") 
plt.ylabel("Execution Time [us]") 

plt.xticks(ind, funcNames) 
figtest.autofmt_xdate() 

plt.savefig(out_file, dpi=80, format='pdf') 
+5

'matplotlib'은'pdf' 파일을 벡터 형식으로 저장합니다. 거기에 비트 맵 이미지가 없으면 DPI는 해상도에 독립적이므로 벡터 이미지에서는 무의미합니다. – Avaris

+1

아하, 알아. 따라서 save()를 사용하여 pdf 이미지를 저장할 방법이 없으므로 show()를 사용하여 (수동으로) 저장할 수있는 이미지와 동일합니다. – memstick

+5

동일해야합니다. 그림을 저장하기 전에 크기를 조정하는 경우에만 차이가있을 수 있습니다. 그러나 그림의 크기 ('figure ((width, height)) ')와'savefig'가이를 사용합니다. – Avaris

답변

3

PDF 절약하지 (벡터 형식으로 의미가) 어떤 라인/폴리곤 해상도를 들어, PDF 내부 이미지 해상도의 DPI 설정을 사용합니다.

출력 결과가 만족 스러우며 확장 가능한 그래픽이 필요하지 않은 경우 png으로 저장하는 것이 좋습니다.

+0

'contourf' (예를 들어)를 사용했다면 pdf/svg에서 래스터 이미지를 얻을 수 있으므로 dpi는 다시 의미가 있습니다. –

+0

@ChrisH - 동의하지 않습니다. Contourf는 래스터가 아닌 벡터 출력을 생성합니다. 그러나 imshow는 이미지를 생성하므로 (메모리에서) 이미지 dpi가 도움이됩니다. HTH – pelson

+1

내 5.5 MB .svg에 따르면 절대 크롤링 속도가 느려집니다. 그런 다음 dpi 설정을 사용하면 축과 겹쳐진 선의 선폭을 얻을 수 있습니다. 나는 이것을 얼마 전에 깨달았지만 로그인하고 업데이트하는 것을 잊었습니다. –