节点在所有图上写入相同的值

节点在所有图上写入相同的值

我正在努力为图添加一个功能:为每个图写入一个关联值。这是我的 MWE:

\documentclass{standalone}
\usepackage{pgfplots}

\newcommand*{\TracSecReso}[4]{
    \pgfmathsetmacro\Wr{#2*sqrt(1-2*(#3^2))} 
    \pgfmathsetmacro\GdBWr{(20*log10(#1))-10*(log10((1-(\Wr/#2)^2)^2+4*(#3^2)*(\Wr/#2)^2))}
    \addplot [mark=none] coordinates {(\Wmin,\GdBWr) (\Wr,\GdBWr) } [densely dotted,#4]
     node[pos=0.5,above] {\GdBWr};
}
\begin{document}
    \begin{tikzpicture} 
        \def\Wmax{10^(2)}
        \def\Wmin{10^(-1)}
        \begin{semilogxaxis}[ymax=50,ymin=-40]
                \TracSecReso{1}{1}{0.5}{}
                \TracSecReso{10}{1}{0.05}{}
        \end{semilogxaxis}
    \end{tikzpicture}
\end{document}

编译后得到:

在此处输入图片描述

如您所见,图片上有两条不同的水平线,每条线都应该标明其值,但两条线上却显示相同的值。

我尝试了几种方法,但仍然无法解决,你能帮助我吗?

答案1

这是由于调查和扩展事物的方式造成的pgfplots。解决这个问题的一种方法是使用\edef\temp\noexpand第节中的技巧8.1 实用命令手册 v1.16。

\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\newcommand*{\TracSecReso}[4]{
    \pgfmathsetmacro\Wr{#2*sqrt(1-2*(#3^2))} 
    \pgfmathsetmacro\GdBWr{(20*log10(#1))-10*(log10((1-(\Wr/#2)^2)^2+4*(#3^2)*(\Wr/#2)^2))}
    \edef\temp{\noexpand\addplot [mark=none] coordinates {(\Wmin,\GdBWr) (\Wr,\GdBWr) } [densely dotted,#4]
     node[pos=0.5,above] {\GdBWr};}
     \temp
}
\begin{document}
    \begin{tikzpicture} 
        \def\Wmax{10^(2)}
        \def\Wmin{10^(-1)}
        \begin{semilogxaxis}[ymax=50,ymin=-40]
                \TracSecReso{1}{1}{0.5}{}
                \TracSecReso{10}{1}{0.05}{}
        \end{semilogxaxis}
    \end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容