Este es un seguimiento de¿Especificar el radio de un arco con pgfplots y dirección del eje cs? Si quisiera cambiar el MWE desde allí a lo siguiente:
\pgfplotsset{compat=1.10}
\begin{tikzpicture}
\begin{axis}[
xmin=-20,xmax=20,
]
\addplot{x}; % not important, just to make things show up
\end{axis}
\draw (axis cs:-16,0) arc[start angle=180, end angle=0, radius=8]; % <-- want to keep units of coordinate system here
\end{tikzpicture}
¿Cómo puedo especificar el radio del arco en el sistema de coordenadas del eje? Lo que ya probé fue una solución dada enExtraer las coordenadas x, y de un punto arbitrario en TikZusando \pgfextractx
. Esto me lleva a longitudes incorrectas en mi caso.
Respuesta1
Los valores del sistema de coordenadas de los ejes se pierden después de \end{axis}
. Eso significa que sólo puedes acceder a nodos con nombre (ni siquiera axis cs
está disponible aquí).
Hay dos soluciones:
Primero, puede sincronizar las unidades de longitud utilizadas por el eje y su imagen, por ejemplo usando x=1cm, y=1cm
en el eje y en el archivo tikzpicture
. El eje se verá diferente ya que esto anula las estrategias de escala.
Alternativamente, se podría intentar recordar la cantidad solicitada. Una forma de hacerlo podría ser
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xmin=-20,xmax=20,
extra description/.code={%
\pgfplotspointaxisdirectionxy{8}{8}
\pgfgetlastxy{\X}{\Y}%
\global\let\radiusX=\X
\global\let\radiusY=\Y
},
]
\addplot{x}; % not important, just to make things show up
\coordinate (P) at (axis cs:-16,0);
\end{axis}
\draw (P) arc[start angle=180, end angle=0, x radius=\radiusX, y radius=\radiusY]; % <-- want to keep units of coordinate system here
\end{tikzpicture}
\end{document}
Mi idea es evaluar axis direction cs
mediante la macro \pgfplotspointaxisdirectionxy
, luego obtengo las coordenadas X e Y calculadas y las recuerdo en dos macros globales. Estos se utilizan más adelante.