相对于主图轴长度缩放插图

相对于主图轴长度缩放插图

我想创建一个图,其中第二个较小的图作为插图。使用以下代码很容易实现,其中width定义了图的 s。但是,我经常在几个不同的文档中使用图形,例如双栏论文、演示文稿和我的论文,每个文档都有不同的\textwidths。因此,我使用tikzscale将图形缩放到适当的大小,同时保留字体大小等。然而,这意味着我不应该widthaxis环境定义一个,如这个问题。但如果我没有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 westouter north east

  • 计算出的宽度实际上比 的宽度略小mainplot。我不知道为什么,可能是我忽略了一些非常明显的东西。

  • 虽然我注意到,当使用north west/ north east(不是 1 outer)并添加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}

相关内容