我正在尝试绘制一些地板/天花板函数的图表,例如 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 thick
1.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}