pgfplots は単純な関数の予期しないグラフを生成します

pgfplots は単純な関数の予期しないグラフを生成します

単純な指数関数 2^x をプロットしたいです。使用しているコードは以下のとおりです。プロットは、ドメインの下限値 (例では -6) を設定した x 軸に当たります。何が間違っているのでしょうか?

\documentclass{amsbook}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{pgfplots} \pgfplotsset{compat=1.18} \usepgfplotslibrary{fillbetween}
\usepackage{tikz}
\begin{document}
\begin{figure}
\caption{$f(x) = 2^x$} \label{fig:Exp2x}
\begin{tikzpicture}
\begin{axis}[
    mark=none,
    domain= -6:2,
    samples=20,
    smooth,
    axis x line=center,
    axis y line=center,
    xlabel=$x$, xlabel style={anchor=west}]
 \addplot[thick] {2^x};
\end{axis}
\end{tikzpicture}
\end{figure}
\end{document}

答え1

ymin=-.5 も追加します。これにより、ymin は関数に対して計算された値ではなくなります。完全なコード:

\documentclass{amsbook}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{pgfplots} \pgfplotsset{compat=1.18} \usepgfplotslibrary{fillbetween}
\usepackage{tikz}
\begin{document}
    \begin{figure}
        \caption{$f(x) = 2^x$} \label{fig:Exp2x}
        \begin{tikzpicture}
            \begin{axis}[
                mark=none,
                domain= -2:2,
                samples=50,
                smooth,
                ymin=-.5,% <--
                axis x line=center,
                axis y line=center,
                xlabel=$x$, xlabel style={anchor=west}]
                \addplot[thick] {2^x};
            \end{axis}
        \end{tikzpicture}
    \end{figure}
\end{document}

正しい出力:

ここに画像の説明を入力してください

追加また、ドメイン -4:2 では、期待される答えが表示されます。

ここに画像の説明を入力してください

答え2

図の横軸の位置を定義する必要があります。選択したときの横軸のデフォルトの位置は、axis lines予想どおりの場所ではありません。

横座標の位置が明示的に定義されていない場合、描画関数の定義域の始点によって定義された点を通って描画されます。つまり、 では にdomain=-5:2ありy(-5)domain=-2:2では にありますが、 では にあり、 では とy(-2)定義すると にあります。ymin=0y=0ymin=-1y=0

ytick=1この事実によれば、選択された軸線では横軸間の距離と最初の 2 つのケースでは他の軸間の距離が異なることがわかりますytick

したがって、MWE を次のように書き直すとします。

\documentclass{amsbook}
\usepackage{geometry}
\usepackage{pgfplots} 
\pgfplotsset{compat=1.18}
\usepackage{tikz}

\begin{document}
    \begin{figure}
\caption{$f(x) = 2^x$} \label{fig:Exp2x}
\pgfplotsset{           % common axis settings
    width = 78mm,       % that images are parallel 
    axis lines=center,
    xlabel=$x$, xlabel style={anchor=west},
    ymin=0,             % <--- that abscisa go through y(0)
    samples=101,
    no marks,
}
    \begin{tikzpicture}
\begin{axis}[
    domain=-5:2,
            ]
\addplot +[thick] {2^x};
\end{axis}
    \end{tikzpicture} 
\quad    
    \begin{tikzpicture}
\begin{axis}[
    domain=-2:2,
            ]
\addplot +[thick] {2^x};
\end{axis}
    \end{tikzpicture}
    \end{figure}
\end{document}

結果は予想通りです:

ここに画像の説明を入力してください

この機能はpgfplotsバグであると宣言するかもしれませんが、多くの状況ではこれが望ましいです (たとえば、y(0)存在しない対数軸、つまりマイナスの無限大の場合)。

grid上記をよりよく理解するために、軸にデフォルトのスタイルを選択し、軸にオプションを追加して図をテストします。

\pgfplotsset{           % common axis setings
    width = 78mm,       % that immages are parralel 
    grid,               % to see grid 
    xlabel=$x$, xlabel style={anchor=west},
    samples=101,
    no marks,
}

このような場合の結果は

ここに画像の説明を入力してください

関連情報