![Pgfplots: enlargelimits=false в addplot3 непоследовательное поведение](https://rvso.com/image/353027/Pgfplots%3A%20enlargelimits%3Dfalse%20%D0%B2%20addplot3%20%D0%BD%D0%B5%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5%20%D0%BF%D0%BE%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5.png)
Я пытаюсь построить что-то 3D. Я использую enlargelimits=false
ключ в pgfplotsset
определении и ограничиваю domain
до -1:1.
При построении первой функции все работает отлично. Ось доходит ровно от -1 до 1:
Однако когда я использую тот же стиль для другой картинки, кажется, что это enlargelimits=false
не имеет никакого эффекта:
Может ли кто-нибудь объяснить, почему это происходит и что я могу сделать, чтобы предотвратить такое поведение?
МВЭ
\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}
решение1
Согласно руководству
/pgfplots/axis equal={⟨true,false⟩}
(вначалеfalse
)
Каждый единичный вектор имеет одинаковую длину, а размеры осей остаются постоянными. Впоследствии соотношения размеров для каждой единицы по x и y будут одинаковыми.
Пределы осей будут увеличены для компенсации эффекта масштабирования.
Редактировать krtek
Вариант unit rescale keep size=true
был как раз подсказкой. Спасибо.
\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}