绘制分段函数的问题

绘制分段函数的问题

我想绘制以下分段函数:

在此处输入图片描述

我使用了以下代码:

\begin{tikzpicture}[
    declare function={
        func(\x)= (\x<-0.5) * (0)  +
        and(\x>=-0.5, \x<=0.5) * (1)     +
        (\x>0.5) * (0);
    }
    ]
    \begin{axis}[
        axis x line=middle, axis y line=middle,
        ymin=-0.25, ymax=1.25, ylabel=$y$,
        xmin=-1, xmax=1, xlabel=$x$,
        ]
        \addplot[domain=-1:1]{func(x)};
    \end{axis}
\end{tikzpicture} 

但输出与上面的图不一样:

在此处输入图片描述

答案1

通过使用const plotpgfplots 选项:

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

\begin{document}
    \begin{tikzpicture}[
declare function={func(\x) = (\x<-0.5)*(0) +
                             and 
                             (\x>=-0.5, \x<=0.5)*(1) +
                             (\x>0.5)*(0);}
                        ]
\begin{axis}[
    axis lines=middle,
    ymin=-0.25, ymax=1.25, ylabel=$y$,
    xmin=-1, xmax=1, xlabel=$x$,
    const plot,
    every axis plot post/.append style={thick},
            ]
        \addplot[domain=-1:1]{func(x)};
\end{axis}
    \end{tikzpicture}
\end{document}

在此处输入图片描述

附录: 正如您在函数声明中看到的那样,脉冲向右移动了一个样本。您可以通过两种方式纠正这一点:

  • 使用@Rmano 的建议,通过坐标绘制你的脉搏
  • 函数的正确定义:
declare function={func(\x) = (\x<-0.5)*(0) +
                             and
                             (\x>-0.51, \x<0.49)*(1) +  % <--- 
                             (\x>0.5)*(0);}

其使用效果\addplot +[domain=-1:1]{func(x)};,以及样品展示标记如下:

在此处输入图片描述

相关内容