手动控制 pgfplots 中轮廓标签的位置?

手动控制 pgfplots 中轮廓标签的位置?

有时 的轮廓标签的自动放置pgfplots并不令人满意。例如,考虑手册中的这个例子(略有改动),

\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat = 1.12}
\begin{document}
\begin{tikzpicture}
  \begin{axis}[domain=-2:2,view={0}{90}]
  \addplot3[contour gnuplot={number=14,label distance=10000pt},thick]
    {exp(0-x^2-y^2)*x};
  \end{axis}
\end{tikzpicture}
\end{document}

这使

在此处输入图片描述

现在我简单地将 x 轴的上限改为 -0.75,

\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat = 1.12}
\begin{document}
\begin{tikzpicture}
  \begin{axis}[domain=-2:2,view={0}{90},xmax=-0.75]
  \addplot3[contour gnuplot={number=14,label distance=10000pt},thick]
    {exp(0-x^2-y^2)*x};
  \end{axis}
\end{tikzpicture}
\end{document}

我明白了

在此处输入图片描述

现在轮廓标签位置与右侧 y 轴重合,因此不可见。当然,我可以增加xmax和/或降低的值label distance以获得更多标签。但是,在我的实际问题(不是上面的 MWE)中,我无法增加xmax(它代表独立变量的最大值),而且我认为一般来说,较少数量的标签看起来更好。在我看来,在这种情况下,如果标签被放置在

  1. 沿 y=0 或
  2. 沿着线 (-1,1.6) -- (-0.75,0)。

这让我想到了我的问题:我可以手动指定轮廓标签的位置吗?如果可以,如何指定?

(当用来生成轮廓时这可能看起来很疯狂gnuplot,但一般来说我使用我自己的工具和选项contour prepared,所以我可以很容易地计算标签的位置。角度也应该是可能的,尽管对于分辨率较差的轮廓水平来说可能更具挑战性。)

答案1

由于没有人发布答案或评论,我想我应该简要概述一下我开发的解决方法。虽然解决方法不是自动化的,但也许对某些人有用。

正如我在问题结尾提到的,我修改了我的代码以提取等值线,这样它也可以写出标签。为简单起见,我假设它们位于一条或多条直线和等值线的交点处。修改后的代码会写出一个以标签为节点的文件,即

\node[align=center,fill=white,inner sep=1pt,font=\tiny,rotate=  46.3] at (axis cs: 0.132129E+01,-0.914058E+00) {0.1};

然后我input使用命令将其放入文件中TikZ/pgfplots。可以根据等值线与直线和标签相交处的斜率自动计算角度。

对于手册中的示例函数pgfplots,结果如下:

在此处输入图片描述

在我看来,这看起来比通过 自动放置标签更好pgfplots,但它更具交互性,并且需要使用contour prepared选项。缺少的一件事是轮廓标签的颜色与轮廓本身的颜色相匹配……

相关内容