用MATLAB生成达到出版质量的图形

  [复制链接]
xxiaotian 发表于 2013-7-18 10:48:28
这个真好用

chengjiuq 发表于 2013-7-23 18:17:24
如果要保存成eps格式,需要ghostscript和xpdf,对应的网站里面都有很多文件可以下载,不知道分别是要下载并安装哪些文件?

jimay 发表于 2013-7-24 15:12:27
export 文件名


这儿是不是弄错了,要写成export_fig 文件名

zega15 发表于 2013-7-25 11:42:36
楼主强大~

shanleibao 发表于 2013-7-25 22:37:52
我的毕业设计里好多图都是这样的~~

zega15 发表于 2013-7-26 10:46:16
强大  学习下

meatball1982 发表于 2013-7-30 15:51:27
winner245 发表于 2013-7-3 03:08
第1个问题已经解决了,就是用export_fig name.eps 命令时,会自动弹出对话框说找不到 pdftops,这时手动选 ...

winner245,
    你好。
  我也安装了gs.并将xpdf放置在“C:\Program Files\xpdf”下。我是win7,64位。matlab是R2012b.
    我希望简单输出一个pdf.
     于是我用
  1. clear all
  2. clc

  3. peaks(30);
  4. export_fig 'a' '-pdf'
复制代码
来实现,但是报错,信息如下图。



1.请问,您当时输出pdf是如何实现的?
2.如果是输出eps.而又没有提示要找pdftops,有没有可能通过命令行实现你说的手动过程。

非常感谢。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

meatball1982 发表于 2013-7-30 17:46:13
对了,我是在“ -hgVersion 2”下,不知道这个有否影响。

winner245 发表于 2013-7-30 17:49:30
meatball1982 发表于 2013-7-30 15:51
winner245,
    你好。
  我也安装了gs.并将xpdf放置在“C:\Program Files\xpdf”下。我是win7,64位。mat ...

我用你的代码输出 a.pdf 是没有问题的 (也可以用:export_fig a.pdf)

1. 输出pdf图形需要预先安装Ghostscript,Ghostscript有32和64位版本,你确定你安装的是64位版本?
2. 输出eps的话,我是首次使用时提示找不到 pdftops,则需要手动选择位置。命令实现我不太清楚


meatball1982 发表于 2013-7-30 19:05:02
winner245 发表于 2013-7-30 17:49
我用你的代码输出 a.pdf 是没有问题的 (也可以用:export_fig a.pdf)

1. 输出pdf图形需要预先安装Ghos ...

winner245
你好。
谢谢你的回复。
1.我安装的是64位版本的。
2.我可能得再看看pdftops的帮助。暂时,没在-hgVersion2下,可以实现两种格式的存储。

非常感谢你的信息和帮助。

winner245 发表于 2013-7-30 21:13:25
meatball1982 发表于 2013-7-30 19:05
winner245
你好。
谢谢你的回复。

问题是输出 pdf 跟 pdftops 没有关系啊,pdftops 是用于将 pdf 格式转化为 ps 格式,仅仅只是输出 eps 才需要。
而输出 pdf,光Ghostscript就OK了,你的目的不是仅仅是输出 pdf 吗?所以,我才怀疑你的问题是不是在于Ghostscript

winner245 发表于 2013-7-30 21:16:40
meatball1982 发表于 2013-7-30 17:46
对了,我是在“ -hgVersion 2”下,不知道这个有否影响。

刚没看到你这句消息。我没有使用 -hgVersion 2。你的意思是你不在 -hgVersion 2下可以实现pdf eps的存储?在-hgVersion 下就不行了?那可能问题就在于这个了

meatball1982 发表于 2013-7-30 22:31:50
winner245 发表于 2013-7-30 21:16
刚没看到你这句消息。我没有使用 -hgVersion 2。你的意思是你不在 -hgVersion 2下可以实现pdf eps的存储 ...

真是麻烦你了。
1. 我是需要pdf,eps的两种格式分别输出。
2.没有hgversio2下,我的两种格式都可以正常输出。
3.在hgversion2下,我的eps和pdf都有问题。我也觉得很可能是由于hg versio2导致的,但这种模式下画图真的很漂亮,如果不是必须eps输出,我一定会选择hg version2的。

感谢你的回复。

winner245 发表于 2013-7-31 00:54:30
meatball1982 发表于 2013-7-30 22:31
真是麻烦你了。
1. 我是需要pdf,eps的两种格式分别输出。
2.没有hgversio2下,我的两种格式都可以正常输 ...

别客气。刚才我又试了一下,我也是在没有 -hgVersion 2 下能正常得到  pdf 和 eps 两种格式。在  -hgVersion 2 模式下,我也得到与你相同的错误信息。我想,这可能归结于 -hgVersion 2 目前还不稳定吧 ,所以,默认的画图才没有在这个模式下。

我还试了一下直接从 figure 界面 save as 成 eps,结果得到 Error Saving Figure 的错误提示。直接 save as 成 pdf,得到的图形不全,只能看到一部分。直接 save as 成 jpg 和 png 没有问题,直接 save as 成 emf 有失真。

于是我又试了一下 print 命令,print 命令倒是可以正常工作,可以用下列命令分别得到 a.eps 和 a.pdf :
print -depsc a
print -dpdf a
看起来没有失真,但是,离 export_fig  “所见即所得” 的标准似乎还有一定差距


kaaaf123 发表于 2013-7-31 01:15:41
winner245 发表于 2013-7-31 00:54
别客气。刚才我又试了一下,我也是在没有 -hgVersion 2 下能正常得到  pdf 和 eps 两种格式。在  -hgVers ...

export_fig的bug还是不少的
以前一直有一个bug是如果指定坐标轴输出图片,那么对于hggroup的对象绘图输出是空白的
例如
scatter(rand(10,1),rand(10,1))
export_fig(gca,'1.png')
这个其实原因是因为他所依赖的allchild函数并不能找到hggroup的成员,还是挺容易修复的
不知道他现在修复了没有

另外,如果用LaTeX的话,matlab2tikz其实是一个很不错的工具
http://www.mathworks.com/matlabc ... e/22022-matlab2tikz

winner245 发表于 2013-7-31 07:12:38
本帖最后由 winner245 于 2013-7-31 08:34 编辑
kaaaf123 发表于 2013-7-31 01:15
export_fig的bug还是不少的
以前一直有一个bug是如果指定坐标轴输出图片,那么对于hggroup的对象绘图输出 ...

matlab2tikz 确实是一个不错的工具,可以直接将 matlab figure 文件转换为 tikz 格式,以 tex 文件形式插入latex,使用起来还是很方便的。不过,这个软件似乎并不能很好的解决图形的白边问题,也似乎不像插入 eps 图形时通过 \includegraphics 命令来调整图形的大小那么方便,因为调整大小这个是 paper 中非常重要的一环,尤其是当paper格式为双栏时。不知道你是否有很好的解决办法?

另外,尽管 matlab2tikz 声称可以支持 2D 和 3D figure, 但我刚发现 matlab2tikz 对于 peaks 这个三维图形存在一些问题。我用 matlab2tikz('myfile.tex') 可以得到 tikz 文件 myfile.tex,将其 插入latex时却无法编译过去。我的latex导言区都是严格遵从matlab2tikz推荐的设定,应该不是导言区的问题,而且我用这个工具针对 2D 图形时,可以完美插入 latex,并且编译能通过,对 peaks 的图形就不行

sanxibei 发表于 2013-7-31 10:21:01
好东西,受教了

爱问功夫 发表于 2013-7-31 10:34:03
学习,受教!

kaaaf123 发表于 2013-7-31 12:10:43
winner245 发表于 2013-7-31 07:12
matlab2tikz 确实是一个不错的工具,可以直接将 matlab figure 文件转换为 tikz 格式,以 tex 文件形式插 ...

调整大小是很容易的,可以修改height和width值,或xscale,yscale等
可以通过matlab2tikz的输入参数修改(help matlab2tikz),或者直接修改生成的文件
阅读LaTeX中PGF的文档,应该有更详细的说明

三维图,我试了下是正常的,没发现问题,matlab代码:
peaks
matlab2tikz('peaks.tikz','height','2.1in','width','2.8in')
tex文件:
\documentclass{article}

\usepackage{pgfplots}

  
\begin{document}
\input{peaks.tikz}
\end{document}

hao07 发表于 2013-7-31 15:21:39
非常棒,谢谢楼主分享!

greatmaxwell 发表于 2013-7-31 20:07:50
好NB!:hug:

naotengliang 发表于 2013-8-1 11:41:17
-hgVersion 2,试了不行啊,求解释,我的版本是2010b

winner245 发表于 2013-8-1 23:21:13
本帖最后由 winner245 于 2013-8-1 23:27 编辑
kaaaf123 发表于 2013-7-31 12:10
调整大小是很容易的,可以修改height和width值,或xscale,yscale等
可以通过matlab2tikz的输入参数修改 ...

谢谢你的帮助!总体而言,我觉得 matlab2tikz 是一个非常不错的软件,转化成 tikz 文件后,插入的图形也比 eps 图形更美观,主要体现在线条,坐标轴数值上,而且,还可以手动修改 tikz 文件。但我还有两个小问题有待解决:

1. 图形尺寸问题
我在程序里将 width 设置成了 '\columnwidth',不指定 height,这样我得到的图形的长宽比例是不变的。然后,我发现,图形实际尺寸上会大于一栏的宽度( \columnwidth),检查了一下 生成的 tikz 文件,前几行是:
\begin{axis}[%
width=\columnwidth,
height=0.788709677419355\columnwidth,
scale only axis,
也就是说matlab2tikz命令里的 width 和 height 实际上仅仅只是坐标轴的  width 和 height ,而实际完整的图形(包括坐标轴的tick labels,和 xlabel,ylabel)的尺寸就会超出一栏的宽度了。所以,对于有xlabel,ylabel 和 xtick ytick的图形时,不能将width 设置成了 '\columnwidth',而需要根绝情况设置成  '0.9\columnwidth' (或者 '0.85\columnwidth') 。这里的问题是,这个 0.9(或0.85)不是一成不变的,还跟 xlabel,ylabel 和 xtick ytick 的字体大小有关系(对于字体大一点的情形,可能需要设置得更小一点)。这就是我之前说的 图形大小控制没有 eps 那么方便。因为在 eps 里 width 是整个图形的大小,而非仅仅是坐标轴围的区域,所以,对于eps图形,直接将 \includegraphisc 命令里 width 设置为\columnwidth,则 eps 图形正好充满一栏,我不需要人为的担心到底是0.9还是0.85

我为了解决上述问题,只好在latex里用了:\resizebox {\columnwidth} {!} {\input{myfile.tex}} 命令,使得整个 tikz 图形的宽度被设置成了 \columnwidth。但是跟eps图形比起来,tikz 图形两边还是有微小的白边 (这个白边其实已经很小了,如果不是我很“挑剔”的话,这个问题基本是可以忽略不计的,但是我把图跟 eps 放在一起还是能看到细微的差别,所以,有点小不爽)。网上有好多办法解决这个问题,但都是设置成为特定的数值来切除,而这种数值却未必是一成不变的,所以,这个小问题有点不方便。


2. hyperef 似乎跟 peaks 得到的图形有冲突
我发现我在导言区加上 \usepackage{hyperref}时,\input{peaks.tikz}会无法编译,但是我自己画的三维图形就可以编译过去,我一直没搞明白 peaks 为什么会和 hyperref 冲突,而自己用 surf 画的图形却没有问题

matlab2tikz('peaks.tikz','height','2.1in','width','2.8in')

kaaaf123 发表于 2013-8-2 04:42:23
winner245 发表于 2013-8-1 23:21
谢谢你的帮助!总体而言,我觉得 matlab2tikz 是一个非常不错的软件,转化成 tikz 文件后,插入的图形也比 ...

1.把scale only axis,去掉试试看
2.应该是可使用的内存不足,可以更改设置,比如用的pdflatex
initexmf --edit-config-file=pdflatex
在打开的配置文件中输入
main_memory= 10000000
多大可以自己决定,之后载入设置就可以编译了

kaaaf123 发表于 2013-8-2 04:43:53
winner245 发表于 2013-8-1 23:21
谢谢你的帮助!总体而言,我觉得 matlab2tikz 是一个非常不错的软件,转化成 tikz 文件后,插入的图形也比 ...

另外,我一直没有看到白边
您需要登录后才可以回帖 登录 | 注册

本版积分规则

热门教程
站长推荐
快速回复 返回顶部 返回列表