在 y 上绘制随机数,x 是范围

Plot random numbers on y, x is the range

提问人:MrSparkly 提问时间:11/11/2023 最后编辑:Karolis KoncevičiusMrSparkly 更新时间:11/11/2023 访问量:45

问:

此问题是从 Cross Validated 迁移而来的,因为它可以在 Stack Overflow 上得到解答。9 天前迁移

我想在 0-180 范围内生成 50 个随机值。我做了什么:

a=runif(50,min=0,max=180)

现在我想要这个图:x 轴是 0-180 的范围,y 轴只是一个值 (1),显示一个点,其中 0-180 数字存在于“a”集合中,如果没有,则什么都没有。

我是否需要为 x 轴生成数字 0-180,或者 R 可以只使用“a”集来做到这一点?如果我这样做,我会得到一个散点图,其中 x 是索引,y 是值。plot(a)

img

R

评论


答:

3赞 Stephan Kolassa 11/11/2023 #1

首先准备一个空图:

plot(c(0,180),c(1,1),type="n",yaxt="n",xlab="",ylab="")

(该参数确保未绘制任何内容。我们使用 .) 抑制垂直轴。type="n"yaxt="n"

然后以恒定的 $y$ 值 1 将点相加:

points(a,rep(1,length(a)),pch=19)

dots

当然,纵横比可以提高(最容易的方法是在打开图形设备时指定高度和宽度,例如,在完成打印时需要关闭 ,使用)。我们可以改变图周围的空白;看。png()dev.off()?par

3赞 Karolis Koncevičius 11/11/2023 #2

如果你想要一些与示例非常相似的东西,这里是:

x <- runif(50, 0, 180)

# make an empty plot
plot.new()
plot.window(xlim = c(0,185), ylim = c(0,2), xaxs = "i")

# add grid lines
abline(h = 1, col = "gray", lwd = 2)
abline(v = c(0,90,180), col = "gray", lwd = 2)

# add points
points(x, rep(1, length(x)), pch = 19, cex = 1.5)

# add axes
axis(1, at = c(0,90,180), font = 2, cex.axis = 2, tck = 0)
box(bty = "L", lwd = 3)

result

评论

1赞 MrSparkly 11/11/2023
谢谢,代码比其他答案长,但它重新创建了外观,太:)
1赞 AkselA 11/11/2023 #3

根据您想要的与给定示例的确切接近程度,代码可能非常简单。例如

dev.new(width=5, height=3)
stripchart(a, pch=16, xaxp=c(0, 180, 2), xlim=c(0, 180), xaxs="i")
grid(nx=4, ny=2, col="#00000044", lty=1)

enter image description here

如果您想比较多个样本,使用作为基础可能是明智的。例如:stripchart()

set.seed(1)
l <- list(a=a, b=runif(10, min=60, max=240))
dev.new(width=5, height=3)
stripchart(l, pch=16, xaxp=c(0, 240, 4), xlim=c(0, 240), ylim=c(0.5, 2.5), xaxs="i")
abline(v=seq.int(0, 240, length.out=5), col="#00000044")
abline(h=1:2, col="#00000044")

enter image description here