目的是在MATLAB中绘图,在LaTeX中利用PGFPlots实现对图的修饰,比如坐标系、坐标轴标记、标题等等。这样能够保证图的中标记与正文文本的一致性,同时又可利用MATLAB强大的数据处理和丰富的绘图功能。整个过程比较顺畅,可以一试。


假设LaTeX文档所在的文件夹是E:\TeX,如下MATLAB代码构成的脚本文件保存在该文件夹下,改变MATLAB的当前目录为E:\TeX,执行该MATLAB脚本,在当前目录下得到如下pdf文档。



MATLAB代码:

[python] view plain​ copy


  1. %% 第一个图
  2. figname='fig1';
  3. % 绘图
  4. x=linspace(0,3*pi,20);
  5. plot(x,sin(x)+100,'-o',x,100+x.^2/20)
  6. % 绘图结束
  7. axis off
  8. set(gca,'Position',[0,0,1,1])
  9. set(gcf,'PaperSize',[8,8])
  10. set(gcf,'PaperPosition',[0.01,0.01,7.98,7.98])
  11. lim=get(gca,'xlim');
  12. set(gca,'xlim',[lim(1) lim(2)+(lim(2)-lim(1))/19])
  13. lim=get(gca,'ylim');
  14. set(gca,'ylim',[lim(1) lim(2)+(lim(2)-lim(1))/19])
  15. print('-dpdf',figname);
  16. dlmwrite([figname '.dat'],[get(gca,'xlim');get(gca,'ylim');get(gca,'zlim')],' ');
  17. %% 第二个图
  18. figname='fig2';
  19. % 绘图
  20. peaks(300);
  21. shading interp
  22. view([0,90])
  23. % 绘图结束
  24. axis off
  25. set(gca,'Position',[0,0,1,1])
  26. set(gcf,'PaperSize',[8,8])
  27. set(gcf,'PaperPosition',[0.01,0.01,7.98,7.98])
  28. set(gca,'XLimMode','manual')
  29. print('-dpdf',figname);
  30. dlmwrite([figname '.dat'],[get(gca,'xlim');get(gca,'ylim');get(gca,'zlim')],' ');

  31. %% 编译LaTeX文档
  32. !pdflatex exam.tex


LaTeX文档(exam.tex):

[python] view plain​ copy


\documentclass[a4paper]{article} \usepackage{CJK} \usepackage{pgfplots} \usepackage{pgfplotstable} \pgfplotsset{width=8cm,compat=1.3} \begin{document} \begin{CJK*}{GBK}{kai} \thispagestyle{empty}
\pgfplotstableread{fig1.dat}\loadedtable \pgfplotstablegetelem{0}{[index]0}\of{\loadedtable} \edef\xmin{\pgfplotsretval} \pgfplotstablegetelem{0}{[index]1}\of{\loadedtable} \edef\xmax{\pgfplotsretval} \pgfplotstablegetelem{1}{[index]0}\of{\loadedtable} \edef\ymin{\pgfplotsretval} \pgfplotstablegetelem{1}{[index]1}\of{\loadedtable} \edef\ymax{\pgfplotsretval}
\begin{center} 这是第一个图 \end{center}
\begin{tikzpicture} \begin{axis}[axis x line=bottom, axis y line=left,enlargelimits=false,axis on top] \addplot graphics [xmin=\xmin,xmax=\xmax, ymin=\ymin,ymax=\ymax] {fig1.pdf}; \end{axis} \end{tikzpicture}
\pgfplotstableread{fig2.dat}\loadedtable \pgfplotstablegetelem{0}{[index]0}\of{\loadedtable} \edef\xmin{\pgfplotsretval} \pgfplotstablegetelem{0}{[index]1}\of{\loadedtable} \edef\xmax{\pgfplotsretval} \pgfplotstablegetelem{1}{[index]0}\of{\loadedtable} \edef\ymin{\pgfplotsretval} \pgfplotstablegetelem{1}{[index]1}\of{\loadedtable} \edef\ymax{\pgfplotsretval}

\begin{center} 这是第二个图 \end{center}
\begin{tikzpicture} \begin{axis}[enlargelimits=false,axis on top] \addplot graphics [xmin=\xmin,xmax=\xmax, ymin=\ymin,ymax=\ymax] {fig2.pdf}; \end{axis} \end{tikzpicture}

\end{CJK*} \end{document}



也许有一个更好的办法,使用matlab2tikz把matlab图形直接转化成tikzp/gfplots代码. 参见