내 질문은 플롯에서 노드의 위치를 지정하는 방법입니다. MWE는 다음과 같습니다.
\begin{figure}
\begin{tikzpicture}
\begin{axis}[
xlabel=X (\%),
ylabel=Y (\%),
legend style={
draw=none, fill=none,
font=\tiny,
at={(0.5,0.17)},
anchor=north,
legend columns=4,
legend cell align={right},
},
xmajorgrids,
]
%CORING (2023)
\addplot+ [red, mark=square*, nodes near coords,every node near coord/.append style=
{xshift=15pt,yshift=8pt,anchor=east,font=\footnotesize}, ultra thick]
coordinates {
(88.25, 93.07)
(78.66, 93.83)
(66.60, 94.20)
(58.19, 94.42)
(40.00, 94.67)
(19.16, 94.75)
(00.00, 93.96)};
\legend{
Method A
}
\end{axis}
\end{tikzpicture}
\caption{My method. %in terms of accuracy versus FLOPs reduction.
}
\end{figure}
이 예에서는 텍스트가 한 줄씩 겹칩니다. 모든 노드의 위치는 다음과 같이 설정됩니다.
{xshift=15pt,yshift=8pt}
그러나 이것이 모든 노드에서 잘 작동하는 것은 아닙니다. 그래서 수정하고 싶어요각 노드의 위치. ChatGPT는 이것을 제안하지만 작동하지 않습니다.
각 좌표에 "node[pos]" 옵션을 추가하여 각 노드의 위치를 수정할 수 있습니다. 여기서 "pos"는 좌표를 레이블에 연결하는 선을 따라 노드의 위치를 지정하는 0과 1 사이의 값입니다. 예를 들어 첫 번째 좌표의 노드를 오른쪽으로 이동하려면 "좌표 근처 노드" 대신 "노드[pos=0.5]"를 설정하고 이에 따라 "xshift" 및 "yshift" 값을 조정하면 됩니다.
미리 감사드립니다!
답변1
옵션을 사용하여 coordinate style
특정 조건에 따라 특정 라벨의 스타일을 수정할 수 있습니다(물론 이 메커니즘을 사용하여 특정 좌표의 라벨을 설정할 수도 있습니다) xshift
.yshift
\documentclass[border=10pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xlabel=X (\%),
ylabel=Y (\%),
legend style={
draw=none, fill=none,
font=\tiny,
at={(0.5,0.17)},
anchor=north,
legend columns=4,
legend cell align={right},
},
xmajorgrids,
]
%CORING (2023)
\addplot+ [
red,
mark=square*,
nodes near coords,
every node near coord/.append style={
font=\footnotesize
},
ultra thick,
coordinate style/.condition={x < 10 || x > 40}{
anchor=west,
},
coordinate style/.condition={x > 60}{
anchor=east,
}
]
coordinates {
(88.25, 93.07)
(78.66, 93.83)
(66.60, 94.20)
(58.19, 94.42)
(40.00, 94.67)
(19.16, 94.75)
(00.00, 93.96)
};
\legend{
Method A
}
\end{axis}
\end{tikzpicture}
\end{document}