La clave de estilo de grupo no funciona en pgfplotsset

La clave de estilo de grupo no funciona en pgfplotsset

Cuando quiero establecer un estilo usando groupplot, haré algo como esto:

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

Sin embargo, descubrí que si intento guardarlo como un estilo usando pgfplotsset, así:

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

aplicar el estilo parece ignorar el contenido de la group styleclave. El valor de otras claves se observa y se aplica correctamente, pero no el de group style. Si quiero realizar cambios en las claves de la groupruta, tengo que especificarlas por completo:

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

Pero esto me parece un comportamiento extraño y no estándar, ya que no usarías esta forma de escribir al especificar opciones para \begin{groupplot}.

Es este el comportamiento esperado? ¿Cuál es la forma recomendada de definir estilos de grupo en pgfplotsset? Aquí tenéis un MWE, donde podéis descomentar las diferentes opciones:

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

Respuesta1

En realidad, el problema es más simple de lo que solía pensar.

En la definición de \begin{groupplot}[#1]vemos lo siguiente

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

Intuitivamente dice que

  • si dices [group style=something]entonces se procesa;
  • si dices [group/something=else]entonces se procesa;
  • de lo contrario, la clave se ignora.

Y a través de algunos experimentos lo que realmente dice es que

  • si dices [group style=something]entonces se procesa;
    • si usted dice[mygroup] , que se define como el mismo que el anterior, entonces esignorado.
  • si dices [group/something=else]entonces se procesa;
    • si dice [mygroup], que se define como el mismo que el anterior, entonces se procesa.
  • de lo contrario, la clave se ignora.

Me temo que no existe una manera fácil de solucionar este problema. El filtrado es una de las características principales de. Tal vez exista un truco para jugar con .cdetc. .retryNo puedo decir.

Después de todo,hace muchas cosas raras. Por ejemplo, el manual afirma que

Hay exactamente un filtro clave en vigor y lo instala o .install key filter handlerpor \pgfkeysinstallkeyfilter.

Pero aquí solo instala dos filtros.

información relacionada