Pgfplots: addplot3 일관되지 않은 동작에서 확대 제한=false

Pgfplots: addplot3 일관되지 않은 동작에서 확대 제한=false

나는 3D 물건을 계획하려고합니다. 나는 정의 enlargelimits=false에 키를 사용하고 -1:1로 pgfplotsset제한합니다 .domain

첫 번째 함수를 그릴 때 모든 것이 잘 작동합니다. 축은 정확히 -1에서 1까지 도달합니다.

여기에 이미지 설명을 입력하세요

enlargelimits=false그러나 다른 사진에 동일한 스타일을 사용하면 아무런 효과가 없는 것 같습니다 .

여기에 이미지 설명을 입력하세요

이것이 왜 발생하는지 그리고 이 동작을 방지하기 위해 무엇을 할 수 있는지 설명할 수 있습니까?


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}

답변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}

여기에 이미지 설명을 입력하세요

관련 정보