使 pgfplot 轴范围之外的节点文本可见

使 pgfplot 轴范围之外的节点文本可见

我正在使用 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=falseaxis环境选项将覆盖pgfplots剪切轴边界框之外的任何内容的默认行为。

根据其他生成的代码,这可能会产生其他副作用,但在大多数情况下都是可以的。

matlab2tikz可以使用的功能将此键设置添加到生成的代码中EXTRAAXISOPTIONS。在调用 之前matlab2tex,添加

EXTRAAXISOPTIONS = {'clip=false'};

在生成的代码中添加此选项。

相关内容