사전 정의된 좌표가 있는 pgfplot addplot

사전 정의된 좌표가 있는 pgfplot addplot

좌표를 재사용하여 플롯에 여러 선을 그리려는 사전 정의된 좌표가 많이 있습니다. 좌표 값을 변경하는 경우 여러 좌표 목록이 아닌 한 번만 변경하고 싶습니다. 따라서 나는 다음과 같은 일을하고 싶습니다

\documentclass[tikz]{standalone}

\usepackage{tikz,pgfplots}
\pgfplotsset{compat=1.9}

\begin{document}
\begin{tikzpicture}

\begin{axis}
\coordinate (p1) at (1,1);
\coordinate (p2) at (2,2);
\addplot coordinates{(p1)(p2)};
\end{axis}

\end{tikzpicture}
\end{document}

다음과 같은 것을 생성하려면

하지만 다음과 같은 오류가 발생하기 때문에 인생은 그렇게 쉽지 않을 것 같습니다.

Runaway argument?
p1)(p2)\pgfplots@EOI \pgfplotsscanlinelengthcleanup 
\pgfplots@coord@stream@end 
\ETC.
Paragraph ended before \pgfplots@loop@next was complete.
<to be read again> 
               \par 
l.15 

축 환경 외부에서도 좌표 정의를 시도했지만 그것도 작동하지 않았습니다.

\addplot 좌표 목록에서 미리 정의된 좌표를 사용하는 방법에 대한 아이디어가 있습니까?

답변1

앞서 언급했듯이 이는 아마도 pgfplots가 확장을 지연시키기 때문일 것입니다. 이렇게 하면 관련 지역 등을 자동으로 확대할 수 있습니다. 그러므로 나는 당신에게 좋은 해결책을 제시할 수 없습니다. 내가 할 수 있었던 최선의 해결 방법은 다음과 같습니다.

\documentclass[tikz]{standalone}
\makeatletter
% from https://tex.stackexchange.com/q/56353/121799
\newcommand{\gettikzxy}[3]{%
  \tikz@scan@one@point\pgfutil@firstofone#1\relax
  \global\edef#2{\the\pgf@x}%
  \global\edef#3{\the\pgf@y}%
}
\newcommand{\gettikzcoordinates}[2]{%
  \tikz@scan@one@point\pgfutil@firstofone#1\relax
  \pgfmathsetmacro{\myx}{round(0.99626*\the\pgf@x/0.0283465)/1000}
  \pgfmathsetmacro{\myy}{round(0.99626*\the\pgf@y/0.0283465)/1000}
  \global\edef#2{(\myx,\myy)}%
}
\makeatother
\usepackage{tikz,pgfplots}
\pgfplotsset{compat=1.9}

\begin{document}
\begin{tikzpicture}
\coordinate (p1) at (1,1);
\coordinate (p2) at (2,2);
\begin{axis}
\gettikzcoordinates{(p1)}{\Pone}
\gettikzcoordinates{(p2)}{\Ptwo}
\addplot coordinates{\Pone\Ptwo};
\end{axis}
\end{tikzpicture}
\end{document}

이 코드는 원하는 플롯을 생성합니다. 확인할 수 있듯이 명령문 \begin{axis}앞 을 이동하면 \coordinate기본적으로 좌표가 필요할 때 정의되지 않았기 때문에 오류가 발생합니다. 매우 자주 를 사용하여 벗어날 수 있지만 \edef\temp{<something>}\temp이 상황에서는 끝없는 루프에 갇히게 됩니다. ( \gettikzxy여기서는 관련이 없습니다. 좌표를 추출하는 방법에 대한 아이디어를 어디서 얻었는지 표시하고 싶었습니다.)

관련 정보