グループ スタイル キーが pgfplotsset で機能しない

グループ スタイル キーが pgfplotsset で機能しない

を使用してスタイルを設定したい場合はgroupplot、次のようにします。

\begin{groupplot}[
  group style={
    group size=1 by 2,
    vertical sep=1cm,
  },
]

ただし、次のようにして を使用してスタイルとして保存しようとするとpgfplotsset、次のようになることがわかりました。

\pgfplotsset{
  mygroup/.style={
    group style={
      group size=1 by 2,
      vertical sep=1cm,
    },
  },
}

スタイルを適用すると、group styleキーの内容が無視されるようです。他のキーの値は観察され、正しく適用されますが、 の値は観察されませんgroup style。パス内のキーを変更したい場合はgroup、それらを完全に指定する必要があります。

\pgfplotsset{
  mygroup/.style={
    group/group size=1 by 2,
    group/vertical sep=1cm,
  },
}

しかし、これは奇妙で非標準的な動作であるように思われます。 にオプションを指定するときにこの書き方は使用しないからです\begin{groupplot}

これは想定された動作ですか? でグループ スタイルを定義するための推奨される方法は何ですかpgfplotsset? さまざまなオプションのコメントを解除できる MWE を次に示します。

\documentclass{article}
\usepackage{pgfplots}
\usetikzlibrary[pgfplots.groupplots,calc]

\pgfplotsset{
  compat=1.12,
  mygroup/.style={
    group style={
      group size=1 by 2,
      vertical sep=1cm,
    },
    every axis plot/.append style={
      smooth,
    }
  },
  mygroupb/.style={
    group/group size=1 by 2,
    group/vertical sep=1cm,
    every axis plot/.append style={
      smooth,
    }
  },
}

\begin{document}

\begin{figure}
  \centering
  \begin{tikzpicture}
    \begin{groupplot}[
        % This style works without "group style"
        % mygroupb,
        % This style doesn't apply "group style"
        % mygroup,
        % But adding it manually here works
        % group style={
        %   group size=1 by 2,
        %   vertical sep=1cm,
        % },
      ]  
      \nextgroupplot
        \addplot+[samples=5,domain=-3:3] {exp(-x^2+1)};
        \addplot+[samples=5,domain=-3:3] {exp(-x^2)};
        \addplot+[samples=5,domain=-3:3] {exp(-x^2-1)};

      \nextgroupplot
        \addplot+[samples=5,domain=-3:3] {exp(-x^2+1)};
        \addplot+[samples=5,domain=-3:3] {exp(-x^2)};
        \addplot+[samples=5,domain=-3:3] {exp(-x^2-1)};
    \end{groupplot}
  \end{tikzpicture}
\end{figure}

\end{document}

答え1

実際、問題は私が考えていたよりも単純です。

の定義では\begin{groupplot}[#1]次のようになります

\pgfkeysinstallkeyfilter{/pgf/key filters/equals}{/pgfplots/group style}%
\pgfkeysinstallkeyfilter{/pgf/key filters/is descendant of}{/pgfplots/group}%
\pgfqkeysfiltered{/pgfplots}{#1}%

直感的にそれは

  • と言うと[group style=something]処理されます。
  • と言うと[group/something=else]処理されます。
  • それ以外の場合、キーは無視されます。

そしていくつかの実験を通して、実際に言えることは

  • と言うと[group style=something]処理されます。
    • [mygroup]上記と同じであると定義されており、無視された
  • と言うと[group/something=else]処理されます。
    • [mygroup]上記と同じように定義されていると言うと、それが処理されます。
  • それ以外の場合、キーは無視されます。

残念ながら、これを簡単に修正する方法はありません。フィルタリングは、.cdおそらく、などを巧みに操るトリックが存在するのでしょう .retry。私には分かりません。

結局、奇妙なことがたくさんある。例えばマニュアルにはこう書いてある。

有効なキー フィルターは 1 つだけあり、 または によってインストールされ.install key filter handlerます\pgfkeysinstallkeyfilter

しかし、ここでは 2 つのフィルターをインストールするだけです。

関連情報