Pgfplots: enlargelimits = false en el comportamiento inconsistente de addplot3

Pgfplots: enlargelimits = false en el comportamiento inconsistente de addplot3

Intento trazar algunas cosas en 3D. Utilizo enlargelimits=falsela clave en la pgfplotssetdefinición y la restrinjo domaina -1:1.

Al trazar la primera función, todo funciona bien. El eje llega exactamente de -1 a 1:

ingrese la descripción de la imagen aquí

Sin embargo, cuando uso el mismo estilo para otra imagen, parece que enlargelimits=falseno tiene ningún efecto:

ingrese la descripción de la imagen aquí

¿Alguien puede explicar por qué ocurre esto y qué puedo hacer para evitar este comportamiento?


MWE

\documentclass{standalone}

\usepackage{pgfplots}

\pgfplotsset{%
  shapefunctionaxis/.style={%
    domain=-1.0:1.0,
    domain y=-1.0:1.0,
    enlargelimits=false,
    axis equal,
    xlabel=$\xi$,
    ylabel=$\eta$,
    zlabel=$N_{\i}$,
    zlabel style={rotate=-90},
    xtick distance={1.0},
    ytick distance={1.0},
    ztick distance={1.0},
    view={25}{30},% default is {25}{30}, pgfplots manual section 4.11.1
  }%
}

\begin{document}

% This works as expected:
\def\i{5}
\def\xii{0}
\def\etai{1.0}
% This does not work as expected:
%\def\i{4}
%\def\xii{-1.0}
%\def\etai{1.0}
\begin{tikzpicture}
  \begin{axis}[
    width=10cm,
    shapefunctionaxis,
  ]
    % Corner nodes
    \ifnum\ifnum\i=1 1\else\ifnum\i=2 1\else\ifnum\i=3 1\else\ifnum\i=4 1\else0\fi\fi\fi\fi%
      =1 %
      \addplot3[surf]{0.25*(1.0+\xii*x)*(1.0+\etai*y)*(\xii*x+\etai*y-1)};
    \else\fi
    % xi-edge middle nodes
    \ifnum\ifnum\i=5 1\else\ifnum\i=7 1\else0\fi\fi%
      =1 %
      \addplot3[surf]{0.5*(1.0-x*x)*(1.0+\etai*y)};
    \else\fi
    % eta-edge middle nodes
    \ifnum\ifnum\i=6 1\else\ifnum\i=8 1\else0\fi\fi%
      =1 %
      \addplot3[surf]{0.5*(1.0+\xii*x)*(1.0-y*y)};
    \else\fi
  \end{axis}
\end{tikzpicture}

\end{document}

Respuesta1

Según el manual

/pgfplots/axis equal={⟨true,false⟩}(inicialmente false)
Cada vector unitario se establece en la misma longitud mientras las dimensiones del eje permanecen constantes. Posteriormente, las proporciones de tamaño para cada unidad en xey serán las mismas.
Los límites del eje se ampliarán para compensar el efecto de escala.


Editado por krtek

La opción unit rescale keep size=trueera exactamente la pista correcta. Gracias.

\documentclass{standalone}

\usepackage{pgfplots}

\pgfplotsset{%
  shapefunctionaxis/.style={%
    domain=-1.0:1.0,
    domain y=-1.0:1.0,
    enlargelimits=false,
    %axis equal,
    unit rescale keep size=true,
    xlabel=$\xi$,
    ylabel=$\eta$,
    zlabel=$N_{\i}$,
    zlabel style={rotate=-90},
    xtick distance={1.0},
    ytick distance={1.0},
    ztick distance={1.0},
    view={25}{30},% default is {25}{30}, pgfplots manual section 4.11.1
  }%
}

\begin{document}

% This works as expected:
%\def\i{5}
%\def\xii{0}
%\def\etai{1.0}
% These does not work as expected:
\def\i{4}
\def\xii{-1.0}
\def\etai{1.0}
\begin{tikzpicture}
  \begin{axis}[
    width=10cm,
    shapefunctionaxis,
  ]
    % Corner nodes
    \ifnum\ifnum\i=1 1\else\ifnum\i=2 1\else\ifnum\i=3 1\else\ifnum\i=4 1\else0\fi\fi\fi\fi%
      =1 %
      \addplot3[surf]{0.25*(1.0+\xii*x)*(1.0+\etai*y)*(\xii*x+\etai*y-1)};
    \else\fi
    % xi-edge middle nodes
    \ifnum\ifnum\i=5 1\else\ifnum\i=7 1\else0\fi\fi%
      =1 %
      \addplot3[surf]{0.5*(1.0-x*x)*(1.0+\etai*y)};
    \else\fi
    % eta-edge middle nodes
    \ifnum\ifnum\i=6 1\else\ifnum\i=8 1\else0\fi\fi%
      =1 %
      \addplot3[surf]{0.5*(1.0+\xii*x)*(1.0-y*y)};
    \else\fi
  \end{axis}
\end{tikzpicture}

\end{document}

ingrese la descripción de la imagen aquí

información relacionada