以非常高的质量将图像保存在python中


109

如何以极高的质量保存python图?

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

另外,保存它的最佳方式是什么?

pngeps?还是其他?我不能做,pdf因为有一个隐藏的数字发生,导致Latexmk编译混乱。

Answers:


153

如果您正在使用matplotlib并试图在乳胶文档中获得良好的数据,请另存为eps。具体来说,请在运行命令以绘制图像后尝试以下操作:

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

我发现eps文件效果最好,而dpi参数的确是使它们在文档中看起来不错的原因。

更新:

要在保存之前指定图形的方向,只需在调用之前plt.savefig在创建图形后调用以下命令即可(假设您使用名称为的轴进行了绘制ax):

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

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

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


@ spencerlon2如果要在保存之前更改图形的方向怎么办?
Dustin

13
为什么需要DPI参数?eps不是矢量格式吗?
mkvoya

1
好点
-SVG

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 dpi是因为许多科学期刊要求图像的分辨率为1200/600/300 dpi。在GiMP或Inkscape中转换为所需的dpi和格式。

编辑:显然dpi没关系,因为.svg是矢量图形,并且具有“无限分辨率”。


2
当我们imshow(..)在图中使用某个位置时,DPI至关重要。这些位图在嵌入到SVG中时会栅格化。使用默认的DPI,结果甚至比我们在屏幕上看到的还要差,绝对不适合出版物。
Evgeni Sergeev

我还强烈建议使用Scourgithub.com/scour-project/scour)来减少svg的文件大小。在最激进的设置下,我可以将文件大小减小到原始大小的50%-如果使用.svgz压缩格式,则可以减小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

如果您正在使用海图,而不是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)的图形:

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

您也可以更高或更低。上述解决方案可以很好地用于打印,但是如今,您希望将创建的图像转换为PNG / JPG或以宽屏格式显示。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.