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

问题描述 投票:0回答:6

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

也就是说,当我不断放大PDF文件中保存的对象时,为什么没有任何模糊?

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

png
eps
?或者其他的?我做不到
pdf
,因为有一个隐藏的数字会扰乱
Latexmk
编译。

python graphics matplotlib save
6个回答
228
投票

如果您正在使用 Matplotlib 并尝试在 LaTeX 文档中获得良好的图形,请另存为 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 位置,但当您开始单击+拖动+旋转图像时,它们会替换为两个角度。


124
投票

只是添加我的结果,也使用 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 的图像,具体取决于图像的内容。在 GIMPInkscape 中转换为所需的 dpi 和格式。

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


12
投票

我得到了spencerlyon2的答案工作。但是,如果有人不知道如何处理这一行,我必须这样做:

beingsaved = plt.figure()

# Some scatter plots
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)

11
投票

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

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

您也可以走得更高或更低。上述解决方案非常适合打印,但现在您希望将创建的图像转换为 PNG/JPG 或以宽屏格式显示。


9
投票

如果您正在使用 seaborn 绘图,而不是 Matplotlib,您可以像这样保存 .png 图像:

假设您有一个

matrix
对象(PandasNumPy),并且您想要获取热图:

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 兼容。 Stack Overflow 周围的其他代码仅适用于以前的版本。

我喜欢的另一种方式是这样的。我将下一张图像的尺寸设置如下:

plt.subplots(figsize=(15,15))

然后我在控制台中绘制输出,我可以从中将其复制粘贴到我想要的位置。 (由于Seaborn是建立在Matplotlib之上的,所以不会有任何问题。)


0
投票

如果 标题在保存过程中被切断,请将

bbox_inches='tight'
添加到您的
savefig
调用中。这就是我在该线程中找到问题第一部分的解决方案后发生的事情。 感谢您的帮助:)

© www.soinside.com 2019 - 2024. All rights reserved.