从 matlab 曲面图导出 svg 图像

exporting svg image from matlab surface plot

我需要一些来制作一些 publication-quality 数字。我首先以 .svg 格式从 matlab 导出图形,然后在 inkscape 中做一些 post-processing。我对使用 plotscatter 生成的图形没有问题,但是当我导出使用 surf(在 view(2) 中)生成的图形时,我 运行 遇到了问题。如果我使用 plotscatter,我可以在 inkscape 中取消分组并处理标题、轴、散点、线条等各个部分。然而,对于 surf,matlab 仅导出一个单独的图形,其中所有不同的部分组合成一个单元。我无法分开单独的部分,当我缩放得非常近时,我实际上可以看到坐标轴和标题的位图分辨率(如果我使用 plot,缩放时标题和坐标轴的分辨率为 'infinite'很接近)。我对具有有限分辨率的表面图很好,但我至少需要能够处理轴和标题(我目前无法做到)。我应该怎么做才能 'separate' 主图的标题和轴,就像从 plotscatter?

生成的图形一样

我过去也使用 Inkscape 来发表我的科学出版物,但我发现很多时候在 latex 中使用 pgfplots 可以获得更好的结果,连同 matlab2tikz matlabscript。网上有大量关于此的资源,但这里是我的工作流程如何适应您的冲浪情况。我有安装了 latex、matlab 和 matlab2tikz 的 macOSX。将在 linux 上几乎不做任何修改就可以工作。

在 Matlab 中:

surf(peaks(25))
matlab2tikz('plot.tikz’)

然后我有以下 bash-脚本(只是与图像位于同一文件夹中的脚本,只需双击即可执行)。 (需要 chmod-ed 作为可执行文件)。

#!/bin/bash

cd ~/Desktop
rm *.eps

cat > plot.tex << EOF
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{max space between ticks=50}
\pgfplotsset{scaled ticks = false}
\pgfplotsset{compat=1.6}
\pgfplotsset{xticklabel style={/pgf/number format/fixed}}
\pgfplotsset{yticklabel style={/pgf/number format/fixed}}
\begin{document}
\input{plot.tikz}
\end{document}
EOF

pdflatex plot.tex
pdf2ps   plot.pdf
ps2eps   plot.ps

请注意,上面的行 cd ~/Desktop 应该更改为反映脚本应该来自哪个文件夹 运行(有点糟糕,但是需要,因为 Finder 没有正确地从执行的程序中传递文件夹,afaik)。

这会产生高质量的 eps 或 pdf 格式的图像或您喜欢的格式,带有大量的轴和刻度等设置。而且它都使用原生乳胶字体。

编辑: 最近开始在matlab中使用patch(),然后按照上面的方法导出到tikz,效果很好。这是另一个建议!

我偶然发现了这个问题,因为我遇到了同样的问题。

如@vindarmagnus 所述,可以使用 tikz 并获得相当不错的结果。但是,根据我的经验,tikz 在使用 surf 等时遇到了大数据集问题。

对我有用的解决方案:

将渲染器更改为画家,导出的 .svg 文件将在打开时保留其矢量图形属性,例如在 inkscape 中:

figure('Renderer','Painters');

您还可以使用:

set(gcf,'Renderer','Painters')