![Pgfplots: enlargelimits = false en el comportamiento inconsistente de addplot3](https://rvso.com/image/353027/Pgfplots%3A%20enlargelimits%20%3D%20false%20en%20el%20comportamiento%20inconsistente%20de%20addplot3.png)
Intento trazar algunas cosas en 3D. Utilizo enlargelimits=false
la clave en la pgfplotsset
definición y la restrinjo domain
a -1:1.
Al trazar la primera función, todo funciona bien. El eje llega exactamente de -1 a 1:
Sin embargo, cuando uso el mismo estilo para otra imagen, parece que enlargelimits=false
no tiene ningún efecto:
¿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⟩}
(inicialmentefalse
)
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=true
era 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}