
Ich habe Probleme mit der Steuerung der Achsen in pgfplots. Ich habe eine Umgebung für Graphen definiert
\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}
}
Wie Sie sehen, habe ich ein bisschen mit den Achsen experimentiert. Mein Problem ist, dass sie nicht gleich lang sind. Ich möchte, dass sie den gleichen festen Bereich 0:10,5 und die gleiche exakte Länge (cm) haben. Normalerweise ist die Y-Achse kürzer als die X-Achse. In Zeile 5 und 6 definiere ich die Namen der Achsen. Wie Sie sehen, werden die Variablen bei 6,1 platziert, anstatt bei etwa 10,5, was ich als Dimension der Achse definiert habe. Ich möchte die Koordinaten der Achse verwenden können, wenn ich den Zeichenbefehl verwende.
Wenn ich die Position auf 10 setze, werden die Knoten völlig falsch platziert.
\draw node at (10,0) { \Large $ #2 $ }; %variable on x-axis
Das letzte Problem ist, dass die Zeichenfunktion in der Umgebung nicht funktioniert
\begin{graph}{x}{y}
\draw[dotted] (0,0) -- (2,2);
\end{graph}
Das bringt mir nichts:
Dank im Voraus.
Antwort1
Hier ist ein Vorschlag. Ich habe unit vector ratio=1 1 1
anstelle von verwendet, axis equal
weil axis equal
die x-Achse dadurch etwas verlängert wird, keine Ahnung, warum. Die Achsenbeschriftungen werden mit xlabel
/ platziert ylabel
und die Position durch Ändern des every axis x label
Stils geändert, ähnlich wie bei y
. Beachten Sie, dass die Koordinaten relativ zur Achse sind, also (0,1)
befindet sich beispielsweise oben auf der y-Achse.
(Ich habe das \caption
Zeug entfernt, weil ich nicht weiß, woher \ifdefempty
es kommt, also würde dieser Teil nicht funktionieren.)
Wenn Sie in der Umgebung \draw
ähnliches verwenden möchten , verwenden Sie das Koordinatensystem, wie Sie in den folgenden Beispielen sehen können.graph
axis cs
\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}