我正在使用 matlab2tikz 来生成 pgfplots .tex 代码,以便使用 pdflatex 创建图形。我用来创建图形的 matlab 函数明确创建了它的每个刻度标记标签,以便可以使用以下 matlab 代码缩放和旋转它们:
text(x(k),y(k),labs{k},'horizontalalignment',horizk,...
'verticalalignment',vertk, ...
'rotation',rotang(k), ...
'fontsize',gfontsize*scl(k), ...
'color',gcolor, ...
'tag','m_grid_xticklabel', ...
'fontname',gfontname);
当我研究转换后的 .tex 代码时,我发现以下内容
\node[below, inner sep=0mm, rotate=359.994889043193, text=black]
at (axis cs:-8.79858922562881e-07, -4.84813663392814e-06,0) {$\text{ 81}^\text{o}\text{W }$};
表示单个刻度标记标签。但是,此行代码所代表的文本字符串未出现在生成的 .pdf 中,可能是因为特定坐标超出了轴的范围。为了测试这一点,我替换了范围内的坐标,进行了编译,然后发现标签或文本变得可见。
有趣的是,如果我使用 view 命令在 matlab 中创建图形,例如
view(45,45)
我可以看到代表轴标签的文本字符串,但对齐不正确。特别是,字符串似乎有一个 y 值,这使它们在图形上的位置比我预期的要高得多。我认为 x 对齐没问题。
我认为解决方案可能位于 matlab 端或 pgfplots/tikz 端。理想情况下,解决方案将由一小段代码组成,这些代码将包含在序言中或设置轴标签时。此代码将允许使用以下构造创建的文本:
\node[<options>] at (axis cs:x,y,z) {<text>};
无论坐标 x、y、z 是否在范围内,都会显示。如果建议不一定能轻易提出,我可以创建一个 mwe。
答案1
添加clip=false
到axis
环境选项将覆盖pgfplots
剪切轴边界框之外的任何内容的默认行为。
根据其他生成的代码,这可能会产生其他副作用,但在大多数情况下都是可以的。
matlab2tikz
可以使用的功能将此键设置添加到生成的代码中EXTRAAXISOPTIONS
。在调用 之前matlab2tex
,添加
EXTRAAXISOPTIONS = {'clip=false'};
在生成的代码中添加此选项。