- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下演示代码,我在其中创建了一个简单的散点图并将其保存为 png
、完全矢量化的 eps
和部分光栅化的 eps
.
对于大量点,我希望矢量化 eps
的文件大小比 png
大得多(至少在合理的 dpi 下),这确实是我观察到的。当我栅格化散点图时,我希望文件大小回到 png
的大小,因为我实际上只是将 png“嵌入”在 eps
对吧?然而,光栅化版本完全膨胀了约 20 倍:
png
:48K,完全矢量化 eps
:184K,光栅化 eps
:3.8M(在 Linux openSUSE 上,python 3.4. 6
, matplotlib 2.2.2
)
这是什么原因?我对将情节光栅化时会发生什么的理解完全错误吗?当我将 png
放入 inkscape 并导出为 eps
时,我得到一个文件(显然是光栅化的),其大小仅比原始 png
.
演示代码:
import matplotlib.pyplot as plt
import numpy as np
# Prepare some random data
N = 10000
x = np.random.rand(N)
y = np.random.rand(N)
dpi = 150
# Create a figure and plot some points
fig = plt.figure()
ax = fig_mesh.add_subplot(111)
scatter = ax.scatter(x, y, zorder=0.5)
# Save it as png or unrasterized eps
fig_mesh.savefig('mesh.png', dpi=dpi) # 184K
fig_mesh.savefig('mesh.eps') # 48 K
# Save it with rasterized points
ax_mesh.set_rasterization_zorder(1)
fig_mesh.savefig('mesh_rasterized.eps', dpi=dpi, rasterized=True) # 3.8M!
提前致谢!
最佳答案
我将在这里回答我自己的问题,但感谢@ImportanceOfBeingErnest 为我指出了正确的方法。对该问题的简短回答是:我对 matplotlib 中的 rasterized
关键字(以及一般的光栅化)的实际作用有错误的理解。
文件大小增加的原因很简单,就是任何被栅格化的内容都必须作为无压缩位图放入生成的 eps
中。根据请求的 dpi,这可能比我们在未光栅化情况下的矢量指令集占用更少的空间,或者更多。可以通过将问题演示代码中的 dpi 值更改为不同的值来对此进行测试。例如,在 dpi = 10
时,光栅化图像明显较小 - 尽管在这种情况下,标绘点的分辨率低得令人难以忍受。然而,在矩形网格的情况下,例如由 pcolormesh
生成,实际上可以设置低 dpi 而不会丢失 pcolormesh
数据的“分辨率”。
为了完整起见,我添加了一个带有 pcolormesh
的示例,其中低 dpi 设置生成的光栅化 eps
小于矢量版本:
import matplotlib.pyplot as plt
import numpy as np
# Prepare some random data
n = 100
N = n*n
data = np.random.rand(N).reshape(n,n)
dpi = 50
# Create a figure and plot some points
fig = plt.figure()
ax = fig.add_subplot(111)
mesh = ax.pcolormesh(data, zorder=0.5)
# Save it as png or unrasterized eps
fig.savefig('mesh.png', dpi=dpi)
fig.savefig('mesh.eps')
# Save it with rasterized points
ax.set_rasterization_zorder(1)
fig.savefig('mesh_rasterized.eps', dpi=dpi, rasterized=True)
此外,在我的研究过程中,我发现了一个简单的“hack”,可以使用我希望的 epstopdf 和 pdftops 命令(在 linux 上测试)轻松减小 eps
的文件大小(看似没有损失)对某些人有用:
$ epstopdf my.eps #Creates file my.pdf
$ pdftops -eps my.pdf # Creates smaller my.eps (overwriting the old one!)
最后,一些帮助我达成理解的相关问题:
关于python - 为什么保存为 .eps 的 matplotlib 图的文件大小会爆炸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51611455/
我正在寻找有助于以编程方式操作 EPS(封装 PostScript)文件的库。基本上,我想做的是: 显示/隐藏 EPS 文件中预先存在的图层(打开和关闭它们) 在 EPS 文件中填充(颜色)命名形状
我试图将 IPython 中的绘图保存为 eps,一开始它似乎可以工作,但是一旦我尝试通过 latex 或 word 访问该绘图,它就不会显示任何内容。如果我将绘图保存为 png 或 jpg,它可以正
我是 Python 的新手,一直在使用 turtle 模块作为学习这门语言的一种方式。 感谢 stackoverflow,我研究并学习了如何将图像复制到封装的 postscript 文件中,并且效果很
我有一个包含数百个项目的直方图,我为其绘制了 Q-Q 图。这导致 EPS 大小为 2.5 兆字节。对于仅包含在出版物中并且不会以 100 倍放大倍率查看的图形来说,这太大了。 R 中是否有任何选项可以
我在二进制搜索中有 2 个比较,但我无法在两个底层之间做出确切的偏好。我在下面的两个示例中摇摆不定: for (int step = 0; step 0) right = middle; else
在 Mathematica 中保存图形时,是否可以以 EPS 格式保存不透明的图形?例如, Plot[Evaluate[Table[BesselJ[n, x], {n, 4}]], {x, 0, 10
一个期刊要我把这些数字作为 EPS 文件提交。使用 ggplot2 从 R 将它们导出为 EPS 文件,然后在 Adobe Illustrator 中打开 EPS 文件告诉我“系统上找不到字体”。
我有一个 encapsulated PostScript似乎只包装图像文件的文件。 有没有工具可以从中提取图像数据? 最佳答案 “convert”将使用ghostscript渲染eps,然后继续渲染位
我目前正在使用 scrapy 从 barcharts.org 中提取 52 周高点列表。然后我获取该数据,删除所有多余的内容,然后将其保存到一个 txt 文件中。然后我获取 txt 文件并使用它从 i
我正在 Linux 中使用 Apache FOP 创建一个 pdf然后我需要将 pdf 转换成 eps。 我尝试了很多方法,唯一似乎有效的方法是 pdftops。但,当我在命令行中将它转换成 Linu
我正在尝试制作 Matlab,7.10.0.499 (R2010a),使用 print 将图形写入 eps,但无论我将图形设置为何种纸张尺寸,它都会不断裁剪轴标签, 除非我把它变成 A3。 这是一个
我正在绘制大型数据集并将其打印为 eps: plot(Voltage,Torque,'b.') print -depsc figure.eps 通过这百万个数据点,我将拟合一个图表。然而,由于电压和扭
我希望将我的 MATLAB 图导出为高质量图形。具体来说,我想将其保存为基于矢量的文件格式,例如 EPS 或 SVG。 I have tried print and saveas commands:
我正在使用 eps 格式在 Matlab 中导出图像,但它使图像变得平滑。 Matlab 不会使用其他格式(例如 png)对图像进行模糊处理。我想知道如何导出 eps 格式的非模糊图像。这是使用 pn
我正在做一个 C# 项目,我需要指导 如何使用 ghostscript、ImageMagik 将 .eps 文件格式转换为 .bmp, 如果不使用 ghostscript,ImageMagik 如何检
我想提取 postscript 图像文件中包含的文本信息(我的轴标签的标题)。这些图像是用 pgplot 生成的。我在 Ubuntu 上尝试过 ps2ascii 和 ps2txt,但它们没有产生任何有
我正在使用 EP plus 和 c# 应用程序构建导出到 excel 的功能。我目前收到错误。 'Table range collides with table tblAllocations29' 在
我有 我从 http://www.shutterstock.com/ 下载的文件file.eps ,它看起来像这样: 我要 将所有这些图标导出到自己的部分,以便我可以在我的网站上使用它们。 我试过了
我想知道是否有人知道我可以在其中创建 QR 码并将自己的图像或 Logo 嵌入其中的库。 导出应该是带有 YCMK 的 EPS。 我在这里找到了这个 http://code.google.com/p/
我读过 this和 this但无法使其发挥作用。 vDF <- data.frame(v = rnorm(50,1,40)) g <- ggplot(vDF, aes(x = vDF)) + geom
我是一名优秀的程序员,十分优秀!