Ajustando diagramas de pgf

Ajustando diagramas de pgf

Tengo problemas para controlar los ejes en pgfplots. He definido un entorno para gráficos.

\newenvironment{graph}[3][]{\begin{figure}[htp]
\def\tempa{#1} %Saves caption since \end cannot take arguments
\begin{center}
\begin{tikzpicture}[scale=1] 
\draw node at (7,0) { \Large     $ #2 $ }; %variable on x-axis
\draw node at (0,6.1) { \Large $ #3 $}; %variable on y-axis
\begin{axis}[
      axis lines=left,
      axis equal,
      %ticks=none,
      %xlabel=$x$,
      %ylabel=$y$,
      %width=8cm,
      %height=8cm,
      domain=0:10.5,
      restrict y to domain=0:10.5
      samples=1000
  ]


}
{
\end{axis}
\end{tikzpicture}
\end{center}
\ifdefempty{\tempa}{}{\caption{\tempa}} %Creates caption if argument is present.
\end{figure}

} 

Como puedes ver, he estado experimentando un poco con los ejes. Mi problema es que no tienen la misma longitud. Me gustaría que tuvieran el mismo dominio fijo 0:10,5 y tuvieran exactamente la misma longitud (cm). Generalmente el eje y es más corto que el eje x. En las líneas 5 y 6 defino los nombres de los ejes. Como puede ver, las variables se colocan en 6.1 en lugar de algo así como 10.5, como definí la dimensión del eje. Me gustaría poder usar las coordenadas del eje cuando uso el comando de dibujo.

1

Si configuro la posición en 10, los nodos están totalmente fuera de lugar.

\draw node at (10,0) { \Large    $ #2 $ }; %variable on x-axis

2

El último problema es que la función de dibujo no funciona dentro del entorno.

\begin{graph}{x}{y}
\draw[dotted] (0,0) -- (2,2);
\end{graph}

Esto no me aporta nada:

3

Gracias de antemano.

Respuesta1

Aquí tienes una sugerencia. Lo usé unit vector ratio=1 1 1en lugar de axis equalporque axis equalparece extender un poco el eje x, no tengo idea de por qué. Las etiquetas de los ejes se colocan usando xlabel/ ylabely la posición se modifica cambiando el every axis x labelestilo, similar a y. Tenga en cuenta que las coordenadas son relativas al eje, por lo que, por ejemplo, (0,1)está en la parte superior del eje y.

(Eliminé el \captionmaterial porque no sé de dónde \ifdefemptyviene, por lo que esa parte no funcionaría).

Si desea utilizar \drawalgo similar en el graphentorno, utilice el axis cssistema de coordenadas, como puede ver en los ejemplos siguientes.

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}
\newenvironment{graph}[3][]{\begin{figure}[htp]
\centering
\begin{tikzpicture}
\begin{axis}[
      axis lines=middle,
      unit vector ratio=1 1 1,
      every axis x label/.style={at={(1,0)},font=\Large,right},
      every axis y label/.style={at={(0,1)},font=\Large,above},
      xlabel=#2,
      ylabel=#3,
      domain=0:10.5,
      xmin=0,xmax=10.5,
      ymin=0,ymax=10.5,
      samples=100,
      no marks
  ]
}
{
\end{axis}
\end{tikzpicture}
\end{figure}
} 
\begin{document}
\begin{graph}{$x$}{$y$}
\addplot {x};
\addplot {x+1};
\addplot {x-1};
\draw [dotted] (axis cs:0,10.5) -- (axis cs:10.5,10.5) -- (axis cs:10.5,0);
\end{graph}

\begin{graph}{$X$}{$Y$}
\addplot {8*sin(deg(x))*sin(deg(x))};
\draw [thick,latex-latex] (axis cs:1.57,8) to[out=40,in=140] node[above]{random} (axis cs:3.14+1.57,8);
\end{graph}
\end{document}

ingrese la descripción de la imagen aquí

información relacionada