如何在 LaTeX 中绘制 Floor/Ceiling 函数图(PGFPlots)

如何在 LaTeX 中绘制 Floor/Ceiling 函数图(PGFPlots)

我正在尝试绘制一些地板/天花板函数的图表,例如 3x+2 的地板,如下所示:http://www.wolframalpha.com/input/?i=graph+of+floor%283x%2B2%29#=

但是,我搜索了 PFGPlots 手册,没有找到关于此内容的提及。有人知道如何在 LaTeX 或 PGFplots 中执行此操作吗?

答案1

您可以使用这种jump mark mid样式,绘制水平不连接的线段。

\begin{tikzpicture}
\begin{axis}[axis lines=middle]
\addplot [
    jump mark mid,
    domain=-3:3,
    samples=100,
    very thick, red
] {floor(3*x)+2};
\end{axis}
\end{tikzpicture}

要得到


一个更奇特的方法可能是使用discontinuous问题的风格均匀分布的概率密度函数绘制间隔。

答案2

对 Jake 的两处小改进解决方案

  • 由于绘图区域被裁剪,起始线和结束线的线宽只有其他线的一半pgfplot。可以通过禁用裁剪clip=false或在垂直方向上放大绘图来解决此问题:(enlarge y limits={abs=.6pt}very thick1.2pt)。

  • 更严重的问题是添加选项后,线的起点和终点不正确grid

    视口

    跳跃值左右两侧的采样点距离不相同,例如 x = 1。

有两种方法可以修复此问题:

第一种方法仅在偶然情况下有效:

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture}
\begin{axis}[axis lines=middle, grid, clip=false]
\addplot [
    jump mark right,
    mark=*,
    domain=-3:3,
    samples=19,
    very thick, red
] {floor(3*x)+2};
\end{axis}
\end{tikzpicture}
\end{document}

采样点已标记。采样数为线数加上一个附加端点:

结果

它之所以有效,是因为除第一个之外的样本点的 x 值都太小了一点点(舍入误差)。

更稳定的解决方案是使用线的中间点。不幸的是,它使域和绘图区域选项变得复杂。带有网格和标记采样点且不带剪辑的版本:

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
    axis lines=middle,
    grid,
    clip=false,
    xmin=-3,
    xmax=3,
    ymin=-7,
    ymax=10,
    enlarge y limits={abs=.6pt}, % very thick: 1.2pt
]
\addplot [
    jump mark mid,
    mark=*,
    domain=-3 - 1/6:3 + 1/6,
    samples=20,
    very thick, red
] {floor(3*x)+2};
\end{axis}
\end{tikzpicture}
\end{document}

带有调试信息的结果

最终的解决方案:

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
    axis lines=middle,
    xmin=-3,
    xmax=3,
    ymin=-7,
    ymax=10,
    enlarge y limits={abs=.6pt}, % very thick: 1.2pt
]
\addplot [
    jump mark mid,
    domain=-3 - 1/6:3 + 1/6,
    samples=20,
    very thick, red
] {floor(3*x)+2};
\end{axis}
\end{tikzpicture}
\end{document}

最后结果

相关内容