
У меня возникли проблемы с управлением осями в pgfplots. Я определил окружение для графиков
\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}
}
Как вы можете видеть, я немного поэкспериментировал с осями. Моя проблема в том, что они не одинаковой длины. Я бы хотел, чтобы у них был одинаковый фиксированный домен 0:10.5 и была бы одинаковой точной длины (см). Обычно ось Y короче оси X. В строках 5 и 6 я определяю имена осей. Как вы можете видеть, переменные размещаются на 6.1 вместо чего-то вроде 10.5, которое я определил как размер оси. Я бы хотел иметь возможность использовать координаты оси при использовании команды рисования.
Если я установлю позицию на 10, узлы будут полностью смещены.
\draw node at (10,0) { \Large $ #2 $ }; %variable on x-axis
Последняя проблема заключается в том, что функция рисования не работает в среде
\begin{graph}{x}{y}
\draw[dotted] (0,0) -- (2,2);
\end{graph}
Это мне ничего не дает:
Заранее спасибо.
решение1
Вот предложение. Я использовал unit vector ratio=1 1 1
вместо , axis equal
потому что axis equal
кажется, что это немного удлиняет ось x, не знаю почему. Метки осей размещаются с помощью xlabel
/ ylabel
, а положение изменяется путем изменения every axis x label
стиля, аналогично для y
. Обратите внимание, что координаты указаны относительно оси, поэтому, например, (0,1)
находится в верхней части оси y.
(Я удалил этот \caption
материал, потому что не знаю, откуда \ifdefempty
он взялся, так что эта часть не сработает.)
Если вы хотите использовать \draw
и подобное в 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}