Gruppenstilschlüssel funktioniert nicht in pgfplotsset

Gruppenstilschlüssel funktioniert nicht in pgfplotsset

Wenn ich einen Stil mithilfe von festlegen möchte groupplot, gehe ich etwa so vor:

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

pgfplotssetIch habe jedoch festgestellt, dass das Ergebnis folgendermaßen aussieht, wenn ich versuche, dies als Stil zu speichern :

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

Beim Anwenden des Stils wird der Inhalt des group styleSchlüssels scheinbar ignoriert. Die Werte anderer Schlüssel werden beachtet und korrekt angewendet, nicht jedoch die von group style. Wenn ich Änderungen an den Schlüsseln im Pfad vornehmen möchte group, muss ich sie vollständig angeben:

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

Aber das scheint mir ein merkwürdiges, nicht standardmäßiges Verhalten zu sein, da Sie diese Schreibweise nicht zum Angeben von Optionen für verwenden würden \begin{groupplot}.

Ist das das erwartete Verhalten? Was ist die empfohlene Methode zum Definieren von Gruppenstilen in pgfplotsset? Hier ist ein MWE, in dem Sie die verschiedenen Optionen auskommentieren können:

\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}

Antwort1

Das Problem ist eigentlich einfacher, als ich dachte.

In der Definition von \begin{groupplot}[#1]sehen wir Folgendes

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

Intuitiv sagt es, dass

  • wenn du es sagst [group style=something], wird es verarbeitet;
  • wenn du es sagst [group/something=else], wird es verarbeitet;
  • andernfalls wird der Schlüssel ignoriert.

Und durch einige Experimente wird tatsächlich Folgendes gesagt:

  • wenn du es sagst [group style=something], wird es verarbeitet;
    • wenn Sie sagen [mygroup], was genauso definiert ist wie oben, dann ist esignoriert.
  • wenn du es sagst [group/something=else], wird es verarbeitet;
    • wenn Sie sagen [mygroup], was genauso definiert ist wie oben, dann wird es verarbeitet.
  • andernfalls wird der Schlüssel ignoriert.

Ich fürchte, es gibt keine einfache Möglichkeit, dies zu beheben. Das Filtern ist eine der Kernfunktionen von. Vielleicht gibt es einen Trick, mit dem man herumspielt .cdund .retryso weiter. Ich kann es nicht sagen.

Schließlich,macht viele bizarre Dinge. Zum Beispiel behauptet das Handbuch, dass

Es ist genau ein Schlüsselfilter wirksam und dieser wird vom .install key filter handleroder von installiert \pgfkeysinstallkeyfilter.

Aber hier werden nur zwei Filter installiert.

verwandte Informationen