【问题标题】:Plot vertical line between 2 values at the same factor在相同因子的 2 个值之间绘制垂直线
【发布时间】:2026-02-21 08:55:01
【问题描述】:

我有几个我想绘制的因素的数据。 对于每个因素,我都有值 A、B、C、D。 我可以通过

绘制所有数据点
plot(A, col="blue")
points(B, col="red")
points(C, col="cyan")
points(D, col="green")

这给了我一个完美的图表,每个因素都有我的 4 个属性。

但我希望 A 和 B 只得到 2 分而不是 4 分,以及从 C 到 D 的垂直线。我该怎么做?

编辑: 很抱歉错过了数据集:

set.seed(42)
names <- c(5, 5, 10, 10, 15)
A <- sample(5) + 10; B <- sample(5) + 10; C <- sample(5) + 5; D <- sample(5)
data <- data.frame(names, A, B, C, D)
data
#  names  A  B  C D
#1     5 11 14  9 2
#2     5 15 12  6 5
#3    10 14 15 10 3
#4    10 13 11  7 1
#5    15 12 13  8 4

【问题讨论】:

  • 这不是很清楚。请提供一个完整的可重现示例,包括可重现形式的所有输入(请参阅r 标签页顶部的信息)并阐明预期的输出。
  • 感谢您的提示。我添加了输入。
  • 你会接受哪个答案?
  • 我会尽快接受我的(仍然锁定18小时)
  • 糟糕的形式,彼得

标签: r plot


【解决方案1】:

使用segments

set.seed(42)
A <- sample(5); B <- sample(5); C <- sample(5); D <- sample(5)
A
# [1] 1 5 4 3 2
B
# [1] 4 2 5 1 3
C
# [1] 4 1 5 2 3
D
# [1] 2 5 3 1 4
plot(A, col="blue")
points(B, col="red")
segments(seq_along(C), seq_along(D), C, D, col="green")

【讨论】:

  • 这是正确的提示。看看我自己的答案。
【解决方案2】:

我更新了问题以包含数据集定义。 这是我的问题的解决方案:

plot(data$A, ylim=c(0,15), col="blue", pch=20, xaxt="n", xlab="", ylab="", main="")
axis(1, at=seq(0.5, nrow(data), 1)+0.5, labels=data$names)

points(data$B, col="red", pch=20)

# now draw lines between C and D points for each data row
segments(x0=seq_along(data$A), y0=data$C, x1=seq_along(data$A), y1=data$D, col="cyan", lwd=5)

这会导致每个数据行 C 和 D 点之间的垂直条/线。

感谢r2evans 指出正确的方向!

【讨论】:

  • 您在这里错误地使用了seq_along。它是按照columns 的数量进行排序的,但是您应该按照rows 的数量进行排序。你需要的是seq_len(nrow(data))。它恰好在这里起作用,因为你有一个方形框架,但你可能并不总是那么幸运。
  • 是的,我在我的真实案例中修复了它。我用seq_along(data$A) 解决了。我会更新我的答案。