我有两个axis
环境,它们都包含不同的图。但是,我确实想保持两者之间的可比性,即我希望两个图在纸上占用相同的空间,以便在 y 轴上进行坐标移动。将两个图设置为相同的高度并不能解决问题,因为它们的 ymax 值不同,因此两个图的比例会有所不同。
在此示例中
\documentclass[border=3mm]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot coordinates {
(0,0)
(1,1)
};
\end{axis}
\end{tikzpicture}
\begin{tikzpicture}
\begin{axis}
\addplot coordinates {
(0,0)
(1,1)
};
\addplot coordinates {
(0,0)
(1,2)
};
\end{axis}
\end{tikzpicture}
\end{document}
}
...我希望第二个轴框的高度自动达到第一个轴框的两倍,这样两个相同的图在两个轴环境中的缩放比例也相同。但实际结果看起来确实像这样:
答案1
您可以使用以下方法将第一个图的 y 单位向量长度保存到宏中
\pgfplotsextra{
\global\edef\yunit{\pgfplotsunitylength}
}
然后可以通过设置 来设置第二个图中的 y 单位向量y=\yunit
。但这只有在使用 时才会正常工作disabledatascaling
,否则单位向量将无法正确报告。
\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\pgfplotsset{
scale only axis, % To make sure the plot *areas* are the same width
width=5cm,
enlarge y limits={abs=0.2}, % To make sure the axes are extended by the same absolute amount
disabledatascaling
}
\begin{tikzpicture}
\begin{axis}
\addplot coordinates {
(0,0)
(1,2)
};
\pgfplotsextra{
\global\edef\yunit{\pgfplotsunitylength}
}
\end{axis}
\end{tikzpicture}
\begin{tikzpicture}
\begin{axis}[y=\yunit]
\addplot coordinates {
(0,0)
(1,2)
};
\addplot coordinates {
(0,0)
(1,3)
};
\end{axis}
\end{tikzpicture}
\end{document}
}
答案2
不是完全自动,但您可以指定高度,或指定 y 单位向量长度。
也许你可以使用 来通过 的值进行一些自动化来确定比例因子ymin
ymax
。这些可以通过\pgfkeysvalueof{/pgfplots/xmin}
,但根据如何在 PGFplots 轴环境中访问 \xmin、\xmax、\ymin、\ymax
仅当它们在轴选项中明确设置后,您才可以访问它们。
\documentclass[border=3mm]{standalone}
\usepackage{pgfplots}
\begin{document}
\pgfplotsset{yticklabel style={text width=3em,align=right}}
\begin{tikzpicture}
\begin{axis}[height=6.0cm,width=10cm,scale only axis]
\addplot coordinates {(0,0) (1,1)};
\end{axis}
\end{tikzpicture}
\begin{tikzpicture}
\begin{axis}[height=12.0cm,width=10cm,scale only axis]
\addplot coordinates {(0,0) (1,1)};
\addplot coordinates {(0,0) (1,2)};
\end{axis}
\end{tikzpicture}
\end{document}
同样不是自动的,但您可以通过指定单位向量的长度[y={<dimension>}]
。
\documentclass[border=3mm]{standalone}
\usepackage{pgfplots}
\begin{document}
\pgfplotsset{yticklabel style={text width=3em,align=right}}
\begin{tikzpicture}
\begin{axis}[y=4cm]
\addplot coordinates {(0,0) (1,1)};
\end{axis}
\end{tikzpicture}
\begin{tikzpicture}
\begin{axis}[y=4cm]
\addplot coordinates {(0,0) (1,1)};
\addplot coordinates {(0,0) (1,2)};
\end{axis}
\end{tikzpicture}
\end{document}