是否有可靠的方法来定义组图中相对于相应标签的比例标签的位置?

是否有可靠的方法来定义组图中相对于相应标签的比例标签的位置?

我被要求尝试将刻度标签贴ytick不是位于地块西北角的正上方,因为这很不寻常。就我个人而言,我倾向于同意。它很容易工作,但above left可能会更好一点。但实际上,最好将它放在 y 轴标签的正上方,然后旋转 90 度。

根据 Jake 的帖子这里,我想到了一个想法,将比例尺定位在正上方,ylabel方法是将其锚定到ylabel每个组图的节点上。但由于我尚未弄清楚的原因,这对组图不起作用。

但总而言之,我打算使用一种可靠的方法来锚定刻度标签xlabelylabel因为微调位置是一项非常耗时的任务。:(

ylabel是否可以将刻度标签固定在组图的北端?

我想要的非常酷的模型(我想要的是蓝色的、看起来很有趣的刻度标签,请想象一下旁边的红色标签xlabel

在此处输入图片描述

MWE(不起作用)

\documentclass[
a4paper
]{scrartcl}

\usepackage{
lmodern,
tikz,
pgfplots,
}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

\usepgfplotslibrary{groupplots}

%\pgfplotsset{
%x label style={at={(rel axis cs:0.5,-0.15)}, name=xlabel},
%y label style={at={(rel axis cs:-0.2,0.5)}, name=ylabel},
%}

\begin{document}
\begin{center}
\begin{tikzpicture}[font=\small]
\begin{groupplot}[
group style={
group size=2 by 1,
horizontal sep=0.2cm,
vertical sep=1.5cm,
ylabels at=edge left,
yticklabels at=edge left,
},
%
ymin=300,
ymax=1300,
%
xlabel={The label for the x-axis},
ylabel={Some y-values},
%
xlabel style={at={(rel axis cs:0.5,-0.15)}, name={xlabel} },
ylabel style={at={(rel axis cs:-0.2,0.5)}, name={ylabel}},
legend style={at={(xlabel.south)}, anchor=north, yshift=-1ex},
%
every x tick scale label/.append style={
    at={(xlabel.east)}, anchor=west, inner sep=0pt
},
every y tick scale label/.append style={
    at={(ylabel.north)}, rotate=90, anchor=south, inner sep=0pt
},
%
scale ticks above exponent={2},
]
\nextgroupplot
\addplot[only marks] coordinates{(2000,1200) (3000,500)};
\addlegendentry{Word}
\nextgroupplot
\addplot[only marks] coordinates{(2000,1200) (4000,400)};
\addlegendentry{Text}
\end{groupplot}
\end{tikzpicture}
\end{center}
\end{document}

答案1

以全自动方式执行此操作非常困难,需要对几个内部宏进行重大更改。如果您可以接受手动提供缩放指数的半自动解决方案,则可以定义一种新样式

\pgfplotsset{
    henry's scale label/.style={
        y coord trafo/.code=\pgfmathparse{##1/(1e#1)},
        ylabel style={
            append after command={
                node [rotate=90, anchor=base west] at (\tikzlastnode.base east) {$\cdot{10^{#1}}$}
            }
        }
    }
}

在您的示例中,您可以使用以下方式调用henry's scale label=3

\documentclass{standalone}

\usepackage{pgfplots}

\usepgfplotslibrary{groupplots}
\pgfplotsset{
    henry's scale label/.style={
        y coord trafo/.code=\pgfmathparse{##1/(1e#1)},
        ylabel style={
            append after command={
                node [rotate=90, anchor=base west] at (\tikzlastnode.base east) {$\cdot{10^{#1}}$}
            }
        }
    }
}

\begin{document}
\begin{tikzpicture}
\begin{groupplot}[
group style={
    group size=2 by 1,
    ylabels at=edge left,
    yticklabels at=edge left,
},
ymin=300, ymax=1300,
xlabel={The label for the x-axis},
ylabel={Some y-values},
scale ticks above exponent={2},
henry's scale label=3
]
\nextgroupplot
\addplot[only marks] coordinates{(2000,1200) (3000,500)};
\addlegendentry{Word}
\nextgroupplot
\addplot[only marks] coordinates{(2000,1200) (4000,400)};
\addlegendentry{Text}
\end{groupplot}
\end{tikzpicture}
\end{document}

相关内容