pgfplots:新的 TikZ 指令無法如預期般運作

pgfplots:新的 TikZ 指令無法如預期般運作

我嘗試參數化我之前的問題,但是,透過定義一個新命令,結果並不像我預期的那樣。那麼,這裡出了什麼問題/遺漏了什麼?

此外,由於我需要將此命令應用於具有不同 y 比例的許多圖,因此如何使箭頭高度成為整個圖高度的百分比或分數,而不是將其定位在某個 y 值?

\documentclass[border=1cm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.14}
\usetikzlibrary{arrows.meta}
\tikzset{
    IntervalLine/.style={
        draw=black, 
        line width=1pt
    },
    IntervalArrow/.style={
    blue,
    very thick,
    {Stealth}-{Stealth}
    }
}


\newcommand{\AnnotateInterval}[3]{
    \begin{tikzpicture}
    \draw[IntervalLine] (#1, \pgfkeysvalueof{/pgfplots/ymin}) -- (#1, \pgfkeysvalueof{/pgfplots/ymax});
    \draw[IntervalLine] (#2, \pgfkeysvalueof{/pgfplots/ymin}) -- (#2, \pgfkeysvalueof{/pgfplots/ymax});
    \draw[IntervalArrow] (#1,2) -- node[above,align=center]{#3} (#2,2);
    \end{tikzpicture}
}


\begin{document}
    \begin{tikzpicture}
    \begin{axis}[xmin=0,xmax=5]
    \addplot[mark=none,blue] {x^2};
    \AnnotateInterval{2}{4}{some text}
    \end{axis}
    \end{tikzpicture}
\end{document}

在此輸入影像描述

答案1

為了使程式碼的輸出更合理,只需從巨集中刪除\begin{tikzpicture}和,正如註釋所討論的那樣。\end{tikzpicture}\AnnotateInterval

如果您希望帶有文字的箭頭位於軸高度的一小部分,則可以使用下面程式​​碼中的方法,其中我修改了巨集\AnnotateInterval以採用四個參數,而不是三個,其中第三個是小數箭頭的高度。

rel axis cs:表示後面的座標使用相對軸座標,即(0,0)是軸的左下角,(1,1)是右上角。

您應該注意的一件事:在程式碼中您有\pgfplotsset{compat=1.14}.如果此處指定的版本是1.10或更早的版本,則指定的巨集將無法在環境中正常運作axis,因為座標不會與軸值相對應。為了使程式碼能夠使用早期的compat設置,您需要將座標從 更改(x,y)(axis cs:x,y)。從 開始compat=1.11,預設座標係是axis cs,因此不需要明確指定它。

\documentclass[border=1cm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.14}
\usetikzlibrary{arrows.meta}
\tikzset{
    IntervalLine/.style={
        draw=black, 
        line width=1pt
    },
    IntervalArrow/.style={
    blue,
    very thick,
    {Stealth}-{Stealth}
    }
}


\newcommand{\AnnotateInterval}[4]{
    \draw[IntervalLine] (#1, \pgfkeysvalueof{/pgfplots/ymin}) -- (#1, \pgfkeysvalueof{/pgfplots/ymax});
    \draw[IntervalLine] (#2, \pgfkeysvalueof{/pgfplots/ymin}) -- (#2, \pgfkeysvalueof{/pgfplots/ymax});
    \coordinate (tmp) at (rel axis cs:0,#3);
    \draw[IntervalArrow] (#1,2 |- tmp) -- node[above,align=center]{#4} (#2,2 |- tmp);
}


\begin{document}
    \begin{tikzpicture}
    \begin{axis}[xmin=0,xmax=5]
    \addplot[mark=none,blue] {x^2};
    \AnnotateInterval{2}{4}{0.2}{some text}
    \end{axis}
    \end{tikzpicture}
\end{document}

相關內容