pgfplots 无法绘制函数 [sin(x)]^100

pgfplots 无法绘制函数 [sin(x)]^100

图像显示 [sin(x)]^100 的图形(红色)在四个小区间内位于 x 轴下方,由于该函数为非负函数,因此其图形应位于 x 轴上或上方。因此绘制 [sin(x)]^100 的图形时出现错误,但我不知道如何纠正它。

我将不胜感激任何愿意为我指出解决方案或途径的人。

在此处输入图片描述

该图像由代码生成

\documentclass[a4paper]{scrbook}
\usepackage{xcolor}
\usepackage{pgfplots}
\begin{document}

\begin{tikzpicture}
    \begin{axis}[xscale=1.5,axis x line=bottom,axis y line=left, 
        axis x line=middle,axis y line=middle,xmax=6.7,ymax=1.3,
        every inner x axis line/.append style={- 
             stealth},xlabel=$x$,ylabel=$f_n(x)$,]
        \addplot+ [domain=0:2*pi,smooth,mark=none,blue] {sin(deg(x))};
        \addplot+ [domain=0:2*pi,smooth,mark=none,red] {sin(deg(x))^100};
    \end{axis}
\end{tikzpicture}

\end{document}

答案1

问题的根源在于使用smooth(样条函数)的样本数量太少。因此,如果您:

  • 增加样本数量,例如增加到 401,
  • 删除smooth指令,
\documentclass[margin=3mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}

\begin{document}
    \begin{tikzpicture}
\begin{axis}[
    axis lines = middle,
    xmax=6.7,   ymax=1.3,
    xlabel=$x$, ylabel=$f_n(x)$,
%
clip=false,
legend style = {at ={(0.8,0.8)}, anchor=west,
                font=\scriptsize, 
                legend cell align=left,
                },  
%
trig format=rad,
domain=0:2*pi,  samples=401,
no marks,
                ]
\addplot    {sin(x)};
\addplot    {sin(x)^100};

\legend{$\sin(x)$, $(\sin(x))^{100}$}
\end{axis}
    \end{tikzpicture}
\end{document}

你会得到想要的结果:

在此处输入图片描述

无关:

  • 清除axis前言(轴指令太多,最后的指令覆盖了第一个指令)
  • 将共同选项从addplot移至axis序言

编辑(1): 向图表中添加了图例。

编辑(2): 您的图表的一个版本,其中 x 刻度以弧度表示并且函数曲线更粗(用于练习):

\documentclass[border=3.141592]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}

\begin{document}
    \begin{tikzpicture}
\begin{axis}[
    x = 12mm,
    axis lines = middle,
    xmax=7,   ymax=1.4,
    xlabel=$x$ (rad), ylabel=$f_n(x)$,
% legend
clip=false,
legend style = {at ={(0.8,0.8)}, anchor=west,
                font=\scriptsize,
                legend cell align=left,
                },
% new
trig format=rad,
      xtick = {pi/4,    pi/2,     3*pi/4,   pi,
               5*pi/4, 3*pi/2,    7*pi/4,  2*pi},
xticklabels = {$\pi/4$, $\pi/2$, $3\pi/4$, $\pi$,
               $5\pi/4$, $3\pi/2$, $7\pi/4$, $2\pi$},
  tick label style = {font=\footnotesize},
x tick label style = {yshift=-2ex, anchor=center},
extra y ticks = {0},
%
domain=0:2*pi,  samples=401,
no marks,
every axis plot post/.append style={thick},
                ]
\addplot    {sin(x)};
\addplot    {sin(x)^100};

\legend{$\sin(x)$, $(\sin(x))^{100}$}
\end{axis}
    \end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

尝试将samples=100sin(x)^100 添加到您的代码中,它应该可以解决问题。这是新代码:

begin{tikzpicture}
    \begin{axis}[xscale=1.5,axis x line=bottom,axis y line=left, 
        axis x line=middle,axis y line=middle,xmax=6.7,ymax=1.3,
        every inner x axis line/.append style={- 
             stealth},xlabel=$x$,ylabel=$f_n(x)$,]
        \addplot+ [domain=0:2*pi,smooth,mark=none,blue] {sin(deg(x))};
        \addplot+ [samples=100,domain=0:2*pi,smooth,mark=none,red] {sin(deg(x))^100};
    \end{axis}
\end{tikzpicture}

相关内容