从matlab曲面图中导出svg图像

时间:2016-12-31 23:33:13

标签: matlab svg plot figure surface

我需要一些来制作一些出版品质的数据。我首先以.svg格式从matlab导出数字,然后在inkscape中进行一些后处理。使用plotscatter生成的数据我没有问题,但是当我导出使用surfview(2))生成的数据时,我遇到了问题。如果我使用plotscatter,我可以取消组合并处理inkscape中的标题,轴,散点,线等各个部分。但是对于surf,matlab只输出一个数字,所有各个部分组合成一个单独的单元。我无法分离单个部分,当我非常接近变焦时,我实际上可以看到轴和标题的位图分辨率(如果我使用plot,当我缩放非常接近时,标题和轴具有“无限”分辨率)。我对具有有限分辨率的曲面图很好,但我需要至少能够处理轴和标题(我目前无法做到)。我该怎么做才能将标题和轴与主图“分开”,就像从plotscatter生成的数字一样?

2 个答案:

答案 0 :(得分:0)

我曾经在我的科学出版物中使用Inkscape,但我发现很多时候你可以通过 latex 中的 pgfplots 获得更好的结果,同时 matlab2tikz matlabscript。关于这个在线有大量的资源,但这里是我的工作流程看起来如何采用你的冲浪情况。我有安装了latex,matlab和matlab2tikz的macOSX。将在Linux上进行很少甚至没有修改。

在Matlab中:

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

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

#!/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,效果很好。这是另一个建议!

答案 1 :(得分:0)

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

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

对我有用的解决方案:

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

figure('Renderer','Painters');