我在 Matlab 中创建了一个漂亮的图,并使用 matlab2tikz 库将其转换为 tikz。它运行良好,但有两个问题:
- 轴的刻度不好。特别是对于 y 轴,应该有更多的刻度,并且在 -16 和 5(在边界处)以及 -6(中间)处有一个刻度。对于轴等距图(下面最后一个图),x 轴和 y 轴的刻度数应该相同。
- 标题似乎没有居中。
这两个问题该如何解决呢?
首先,让我展示一下 Matlab 代码:
set(0,'DefaultTextInterpreter','latex');
h = figure('outerposition', [0 0 1920 1080]);
set(h, 'Units', 'centimeters');
hold on
plot([5,5],[-16,4],':k');
plot([-5,15],[-6,-6],':k');
a = 0:pi/100:2*pi;
b = sin(a);
plot(a,b)
hold off
xlim([-5,15]);
ylim([-16,4]);
NumTicks = 11;
L = get(gca,'XLim');
set(gca,'XTick',linspace(L(1),L(2),NumTicks))
set(gca, 'FontSize', 24, 'fontname', 'times');
xlabel('x', 'Interpreter','latex', 'fontsize', 24);
ylabel('y', 'Interpreter','latex', 'fontsize', 24);
title('This is a Test', 'Interpreter','latex', 'fontsize', 24);
box on
% Export to tikz
cleanfigure;
matlab2tikz('test.tikz', 'height', '\figureheight', 'width', '\figurewidth', 'showInfo', false);
导出为 .png 后,图表如下所示:
现在我通过以下方式将 test.tikz 包含到 LaTeX 文档中:
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usetikzlibrary{plotmarks}
\usepackage{grffile}
\usepackage{amsmath}
\pgfplotsset{plot coordinates/math parser=false}
\newlength\figureheight
\newlength\figurewidth
\begin{document}
\begin{figure}
\centering
\setlength\figureheight{6cm}
\setlength\figurewidth{10.6667cm}
\input{test.tikz}
\caption{This is my caption}
\label{fig:sphere}
\end{figure}
\end{document}
输出如下:
可以看出,尤其是 y 轴的刻度位置错误(-16、-6 和 4 处没有刻度)并且刻度太少。
当我使用\setlength\figurewidth{6cm}
,即方形(轴相等)图时,输出如下:
对于这种类型,我希望两个轴的刻度数相同。
答案1
matlab2tikz
可以通过编辑以下内容的调用来解决这两个问题:
matlab2tikz('test.tikz', 'height', ...
'\figureheight', 'width', '\figurewidth', ...
'showInfo', false,...
'extraaxisoptions','ytick={-16,-14,...,4}', ...
'extratikzpictureoptions','trim axis left,trim axis right'...
);
除了,您还可以像一样extraaxisoptions
明确设置 y 刻度,例如。问题是,如果没有另行说明,会自行确定刻度位置。xticks
set(gca,'YTick',linspace(-16,4,NumTicks))
pgfplots
至于标题,它位于图像的中心,您必须考虑到,就 LaTeX 而言,它只看到一个框,它将其居中。该框不仅包含轴,还包含 yticks 和 ylabel。extratikzpictureoptions
上面显示的将设置边界框,tikzpicture
以便不考虑轴边界左侧或右侧的任何内容。这样,标题将相对于轴居中,但另一方面,整个图表将稍微向左偏移。
答案2
我也遇到过类似的问题。但是,解决方案Torbjørn T.
不是自动的。也就是说,它需要数据范围的信息。
为了使事情自动化,请\pgfplotsset{try min ticks=6}
在文档序言中使用。用6
你喜欢的刻度数替换。
引自这里。