2013-04-24 267 views
54

如何以非常高的质量保存python图?以非常高的质量在python中保存图像

也就是说,当我不断放大保存在pdf文件中的对象时,没有模糊?

另外,什么是最好的模式来保存它?

pngeps?还是其他的?我不能这样做pdf,因为有一个隐藏的号码发生,编译Latexmk混乱。

回答

77

如果您使用matplotlib并试图在乳胶文档中获得好的数字,请另存为eps。具体来说,尝试这样的事情在运行命令绘制图像后:

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

我发现,EPS文件的工作最好,dpi参数是真正使他们在文档中的好看。

UPDATE:

为了节约只需调用plt.savefig调用之前以下,但创建的情节后(假设你已经使用的轴名为ax绘制)之前指定数字的方向

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

其中elevation_angle是指定极角(从垂直z轴向下)和azimuthal_angle指定方位角(围绕z轴)的数字(以度为单位)。

我发现,通过首先绘制图像然后旋转它并观察角度的当前值出现在实际绘图正下方的窗口底部来确定这些值是最容易的。请记住,默认情况下,x,y,z位置出现,但当您开始点击+拖动+旋转图像时,会被两个角度替换。

+0

@ spencerlon2如果我想什么在保存之前更改图形的方向? – dustin 2013-04-24 05:01:14

+0

查看已更新的回复。 – spencerlyon2 2013-04-24 05:19:56

31

只是添加我的结果,也使用matplotlib。

.eps使我的所有文字都变为粗体并删除了透明度。 .svg给了我实际上看起来像我的图形的高分辨率图片。

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

我使用了1200dpi,因为很多科学期刊需要1200/600/300dpi的图像,具体取决于图像的类型。在GiMP或Inkscape中转换为所需的dpi和格式。

编辑:显然,dpi并不重要,因为.svg是矢量图形并具有“无限分辨率”。

+0

当我们在图上的某处使用'imshow(..)'时,DPI很重要。这些位图在嵌入到SVG中时会被栅格化。使用默认的DPI,结果甚至比我们在屏幕上看到的还要糟糕,绝对不适合出版物。 – 2017-03-12 11:28:23

0

好吧,我发现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)