我嘗試參數化我之前的問題,但是,透過定義一個新命令,結果並不像我預期的那樣。那麼,這裡出了什麼問題/遺漏了什麼?
此外,由於我需要將此命令應用於具有不同 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}