以高质量在python中保存图像

时间:2013-04-24 04:38:28

标签: python graphics matplotlib save

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

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

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

pngeps?还是其他一些?我无法做pdf,因为有一个隐藏的数字与Latexmk编译混乱。

5 个答案:

答案 0 :(得分:122)

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

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

我发现eps文件效果最好,dpi参数真正使它们在文档中看起来很好。

更新:

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

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

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

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

答案 1 :(得分:50)

只是添加我的结果,也使用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 :(得分:4)

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

答案 3 :(得分:3)

如果您正在使用 seaborn 绘图,而不是matplotlib,可以保存一个.png图像,如下所示:

让我们假设您有一个matrix对象(熊猫或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之上的,所以不会有问题。)

答案 4 :(得分:0)

您可以使用以下方法将其保存为1920x1080(或1080p)的图形:

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

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