Especificar el radio del arco en unidades de sistemas de coordenadas

Especificar el radio del arco en unidades de sistemas de coordenadas

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 csestá 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=1cmen 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}

ingrese la descripción de la imagen aquí

Mi idea es evaluar axis direction csmediante la macro \pgfplotspointaxisdirectionxy, luego obtengo las coordenadas X e Y calculadas y las recuerdo en dos macros globales. Estos se utilizan más adelante.

información relacionada