【问题标题】:Matlab color maps to SVG or PDFMatlab 颜色映射到 SVG 或 PDF
【发布时间】:2016-03-31 17:28:18
【问题描述】:

我正在使用plotsurf/mesh 在matlab 中生成多个绘图。当我尝试将它们保存为 SVG 或 PDF(从图形窗口保存菜单)时,我得到了 plot 的漂亮矢量图形,但在 surfmesh 的 SVG 或 PDF 中嵌入了非矢量图形。

知道如何解决这个问题吗?

【问题讨论】:

  • 您是否尝试过其他导出方法?我使用export_figpdfs 是矢量图,但 contour 绘图是分段的,在 surf 绘图中可以看到三角剖分,就像三角形之间有微小的间隙一样。这可能是由于每种导出方法如何处理(可能的)颜色阴影造成的。 matlab 的默认工具可能会光栅化图形,然后将其保存为给定格式。 export_fig 可能会将图形矢量化(将所有对象分割为具有相同颜色的部分)并保存。
  • 我会试试的。使用我的方法,在处理 surfmesh 图形时,甚至轴也会被光栅化。
  • 我不知道你对export_fig 的意思是什么,你能在一个简短的例子中使用它吗?我已经尝试过使用 saveas(gcf,'picture','pdf')saveas(gcf,'picture','svg') 获得类似的非向量结果...
  • print('picture','-dpdf') 和 'print('picture','-dsvg')` 给出了同样的问题。

标签: matlab pdf svg matlab-figure vector-graphics


【解决方案1】:

export_fig 是用于将图形导出为各种文件格式的宏。安装 GhostScript 后,它可以直接以pdf 格式导出。可以通过File Exchange下载。

使用

export_fig('foo','-pdf','-nocrop')

它会产生这个结果(Adobe Acrobat 的屏幕截图):

如果您仔细观察,您可以在第二张图片中看到surf 绘图的结果和contour 绘图的分割结果中的三角剖分边缘(“缺失像素”线)。

您可以看到光栅化发生在最后一步(在本例中为 PrintScreen),因此生成的 pdf 由矢量格式的段组成,因此 line 绘图的标签、轴和结果将在矢量中

如果这个pdf 被导出到位图,比如png,那些“缺失”的像素就会消失,并且会从第一张图像中产生“透视”效果。请参阅(Adobe Acrobat 9 Pro;隔行扫描:Adam7,过滤器:自适应)

分辨率 300 像素/英寸(分辨率为 2400 像素/英寸的图像太大)

分辨率 2400 像素/英寸

绘图是由来自此answer 的代码生成的。

【讨论】:

  • 不错!现在我想知道是否有可能采用中间方法,其中surfmesh 被光栅化,但轴、标签、图例......是矢量。无论如何,前段时间我设法做我正在寻找的事情,但是使用 GNUplot,所以在 Matlab 中也能实现它会很棒......(例如gredos.usal.es/jspui/bitstream/10366/123970/3/…,第 28 页)
  • 也许saveassurf 的“光栅化”导出,export_fig 对图形其余部分的“矢量化”导出并将它们合并到其他地方是实现这一目标的方法。我还没有玩过渲染,所以可能有一些东西可以玩。也许……
  • :(我想相信 Matlab 有一些方法可以生成漂亮的 2D 矢量图形颜色图。谢谢!
  • 虽然我的图像看起来有点难看(分段轮廓、可见的三角剖分边缘),但请注意第二张图像放大了 42 倍!当我在 Acrobat(文件->导出->图像)中对图像进行 raserize 处理时,它看起来非常漂亮 :)
  • @Andrestand 查看我的编辑。可以看到结果取决于矢量格式的数据如何处理成位图(matlab的saveas,Adobe的File-Export-Image和pdf预览)。从你上面的链接我可以看出你和我有同样的痴迷:)
【解决方案2】:

我不知道原因,但我已经弄清楚问题应该出在哪里了。

我使用的是mesh,它产生了类似(情节和颜色条)的东西:

尝试使用surf; shading interppcolor 会生成巨大的文件,所以我避免使用它们。

我正在寻找的选项与使用 imagesc 而不是 mesh 时得到的选项非常相似:

这并不完美,由于坐标轴或颜色条主框,您会看到一些奇怪的细白色对角线: 但我得到了足够高质量的矢量文件。

此外,如果您在同一个figure 中的多个subplots 中使用meshimagesc,您还将获得用于嵌入pdf 中的imagesc 的光栅图像或.svg 文件:

【讨论】:

  • 您可以隐藏白色对角线,方法是在inkScape 中多次取消对绘图的分组,并将地图划分的两个部分一起移动一点。更多关于这里的问题:es.mathworks.com/matlabcentral/answers/…
猜你喜欢
  • 2016-04-06
  • 1970-01-01
  • 1970-01-01
  • 2019-01-12
  • 2012-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多