
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.
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
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:
Gracias de antemano.
Respuesta1
Aquí tienes una sugerencia. Lo usé unit vector ratio=1 1 1
en lugar de axis equal
porque axis equal
parece extender un poco el eje x, no tengo idea de por qué. Las etiquetas de los ejes se colocan usando xlabel
/ ylabel
y la posición se modifica cambiando el every axis x label
estilo, 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 \caption
material porque no sé de dónde \ifdefempty
viene, por lo que esa parte no funcionaría).
Si desea utilizar \draw
algo similar en el graph
entorno, utilice el axis cs
sistema 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}