我想创建一个图,其中第二个较小的图作为插图。使用以下代码很容易实现,其中width
定义了图的 s。但是,我经常在几个不同的文档中使用图形,例如双栏论文、演示文稿和我的论文,每个文档都有不同的\textwidth
s。因此,我使用tikzscale
将图形缩放到适当的大小,同时保留字体大小等。然而,这意味着我不应该width
为axis
环境定义一个,如这个问题。但如果我没有width
为主图定义固定值,那么我也无法为插图定义宽度。
是否有可能将width
插图设置为相对于主图的值,width
而无需为主图指定明确的宽度(即主图的宽度width
未知)?
\documentclass[crop,10pt]{standalone}
\usepackage[english]{babel}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
width=12cm,
name=mainplot,
enlargelimits=false,
]
\addplot coordinates {(0,0) (1,1) (2,2)};
\end{axis}
\begin{axis}[
width=4cm,
at={($(mainplot.north west) + (rel axis cs:0.1,-0.1)$)},
anchor=north west,
enlargelimits=false,
]
\addplot coordinates {(0,2) (1,1) (2,0)};
\end{axis}
\end{tikzpicture}
\end{document}
答案1
这里有一个不太完美的方法,用于设置内轴相对于外轴的宽度。 的用法\pgfgetlastxy
取自 Peter Grill 对提取 TikZ 中任意点的 x,y 坐标.veclen(x,y)
计算向量 (x,y) 的长度。
笔记:
使用
mainplot.north west
和时mainplot.north east
,您获得的长度是不含图例、刻度标签和标签的轴的宽度。如果您想要相对于外部图的总宽度的新宽度,请使用outer north west
和outer north east
。计算出的宽度实际上比 的宽度略小
mainplot
。我不知道为什么,可能是我忽略了一些非常明显的东西。虽然我注意到,当使用
north west
/north east
(不是 1outer
)并添加scale only axis
到内轴时,相对比例是正确的。
\documentclass[border=3mm]{standalone}
\usepackage[english]{babel}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
name=mainplot,
enlargelimits=false,
]
\addplot coordinates {(0,0) (1,1) (2,2)};
\end{axis}
\path (mainplot.outer north west); \pgfgetlastxy{\xw}{\yw}
\path (mainplot.outer north east); \pgfgetlastxy{\xe}{\ye}
\pgfmathsetmacro\miniplotwidth{veclen(\xe-\xw,0)*0.5}
\begin{axis}[
width=\miniplotwidth,
at={($(mainplot.north west) + (rel axis cs:0.05,-0.05)$)},
anchor=outer north west,
enlargelimits=false,
]
\addplot coordinates {(0,2) (1,1) (2,0)};
\end{axis}
\end{tikzpicture}
\end{document}