如何在 R 中使用 rug 函数实现指数分布?

How do I use the rug function for an exponential distribution in R?

我刚开始使用 R。我想在 x 轴上绘制时间间隔(分布是指数的),每次间隔结束时都有一个刻度线。如果我有一串时间说 (0.2, 0.8, 0.9 , 1.0) 那么 x 轴上的刻度线将分别位于 0.2、0.8、0.9 和 1 上。对于大数据样本,我希望我的图表看起来像:

所以使用后,

set.seed(1)
x <- rexp(50, 0.2)

我怎样才能更进一步,我是否必须使用 rug 功能(我正在尝试学习如何使用)?我也可以在这个图表上加上时间戳吗?

编辑

所以我修改了我的命令并使用了:

x <- c(cumsum(rexp(50, 0.2)))
y <- rep(0, length(x))
plot(x,y)
rug(x)

我已经得到了这个:

如果仅此而已,这个结果就可以了。但是,是否有一行命令可以用来编辑第二张图片所示的结果,并获得第一张图片所示的结果?我只想在水平线上而不是整个图上得到这些刻度线。或者不可能?

rug() 只需要一个值向量来描述在何处绘制刻度线(地毯)。如果在 x-axis 上绘制值 x,则这些值构成 rug 函数的输入数据。输入 ?rug 以获得进一步的帮助。

# generate y values
y <- rexp(50, 0.2)
# split plotting area into two columns - optional
par(mfrow = c(1, 2))
plot(x, y)
rug(x)
# plot with both axes in log scale to show that rug adjusts to axes scale
plot(x, y, log = "xy")
rug(x)

使用 ggplot,您可以使用 geom_rug() 向地块添加地毯。首先需要将数据做成data.frame

library("tidyverse")
set.seed(1)
x <- rexp(50, 0.2)

ggplot(data.frame(x), aes(x = x)) + geom_rug()

地毯比较矮(好像是图高的比例,不可控)

相反的方法是使用 geom_vline,这将使行的长度达到 y-axis

#ggplot(data.frame(x), aes(xintercept = x)) + geom_vline() #doesn't work
ggplot(data.frame(x)) + geom_vline(aes(xintercept = x))