组图的通用标签

组图的通用标签

这可以被认为是以下问题的组合

如何为一组 pgfplots 放置标题?

将分组图的 ylabel 对齐到一条公共线上

下面的代码片段渲染了两个图,一个在另一个之上,并为两个图附加一个通用的 ylabel。

\documentclass[tikz]{standalone}
\usepackage[T1]{fontenc}
\usepackage{cmbright}
%% Just some font that has serifs for maths                                          
%% Yes; this particular combination is horrible                                      
\usepackage{euler}
\usepackage{pgfplots}
\usepgfplotslibrary{units}
\pgfplotsset{compat=newest}
\usepgfplotslibrary{groupplots}
\begin{document}
\begin{tikzpicture}
  \begin{groupplot}[group style={group size=1 by 2}]
    \nextgroupplot[ylabel = ylabel, y unit = m/s]
    \addplot coordinates {(0,0) (1,1) (2,2)};
    \nextgroupplot
    \addplot coordinates {(0,2) (1,1000) (2,0)};
  \end{groupplot}

  \node at ($(group c1r1.west)!0.5!(group c1r2.west)$)
  [xshift=-1.5cm] % Problem #1: estimated distance                                   
  {\rotatebox{90}{ylabel [$\mathrm{m/s}$]}};
  % Problem #2: Copying pgfplots internals,                                          
  % i.e. /pgfplots/unit code/.code 2 args={\mathrm{#1#2}}                            
\end{tikzpicture}
\end{document}

渲染

有两个问题:如果这种near ticks机制也适用于这种情况,那就太好了,也就是说,可以自动确定与两个图的最佳距离;最重要的是,如果使用单位,ylabel 就不再只是一小段文本,而是更复杂的东西;我宁愿不重新发明这种机制。

有没有更好的方法来处理这个问题?

答案1

您可能会发现以下方法很有帮助。在这里,我只需将标签添加到第二个图(标签最宽的图)并将其放置在10%上方相对于第二个图的轴的位置。这样做的优点是 (a) 使用标准标签样式和 (b) 定位会随着不同图大小而以合理的方式变化。主要选择是将其附加到哪个图,选择基于标签最宽的图。

示例输出

\documentclass{article}

\usepackage{pgfplots}
\usepgfplotslibrary{units,groupplots}
\pgfplotsset{compat=newest}

\begin{document}

\begin{tikzpicture}
  \begin{groupplot}[group style={group size=1 by 2}]
    \nextgroupplot
    \addplot coordinates {(0,0) (1,1) (2,2)};
    \nextgroupplot[ylabel=ylabel,y unit=m/s,
      every axis y label/.append style={at=(ticklabel cs:1.1)}]
    \addplot coordinates {(0,2) (1,1000) (2,0)};
  \end{groupplot}
\end{tikzpicture}

\end{document}

相关内容