매개변수화를 시도했습니다.내 이전 질문, 그러나 새 명령을 정의하면 결과가 예상과 다릅니다. 그렇다면 여기서 무엇이 잘못되었거나 누락되었나요?
또한 이 명령을 다양한 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
3개가 아닌 4개의 인수를 사용하도록 수정했습니다. 여기서 세 번째는 분수입니다. 화살표의 높이.
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}