Especifique o raio do arco em unidades de sistemas de coordenadas

Especifique o raio do arco em unidades de sistemas de coordenadas

Este é um acompanhamentoEspecifique o raio de um arco com pgfplots e direção do eixo cs? Se eu quiser mudar o MWE para o seguinte:

\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}

Como posso especificar o raio do arco no sistema de coordenadas do eixo? O que eu já tentei foi uma solução dada emExtraia as coordenadas x, y de um ponto arbitrário em TikZusando \pgfextractx. Isso leva a comprimentos errados no meu caso.

Responder1

Os valores do sistema de coordenadas dos eixos são perdidos após \end{axis}. Isso significa que você só pode acessar nós nomeados (nem mesmo axis csestá disponível aqui).

Existem duas soluções:

Primeiro, você pode sincronizar os comprimentos das unidades usadas pelo eixo e sua imagem, por exemplo, usando x=1cm, y=1cmno eixo e no tikzpicture. O eixo terá uma aparência diferente, pois anula as estratégias de dimensionamento.

Alternativamente, pode-se tentar lembrar a quantidade solicitada. Uma maneira de fazer isso pode 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}

insira a descrição da imagem aqui

Minha ideia é avaliar axis direction cspor meio da macro \pgfplotspointaxisdirectionxy, então pego as coordenadas X e Y calculadas e as lembro em duas macros globais. Eles são usados ​​​​mais tarde.

informação relacionada