ggplot2中geom_point()的垂直线数据点

4
有没有办法在 ggplot2 中以垂直线条的形式表示数据点?0-25 的任何形状选项都不是我想要的,所以我猜我需要另一个插件或一种更改形状15尺寸的方法。这里的左图表是我想要的样子的一个例子。
以下是一些简单的代码,如果有帮助,请参考响应:
a <- c(1, 3, 5)
b <- c(2, 4, 6)
df <- data.frame(a, b)

ggplot(data = df, aes(x = a, y = b)) +
geom_point(shape = 15)

4
使用ggplot对数据框df进行图形绘制,横坐标为a列,纵坐标为b列,并添加点图层(使用竖杠|作为点的形状,大小为7) - G. Grothendieck
1
你也可以使用 ggplot 的参数 shape 和 size。geom_point(shape = "|", size = 7) 是相同的。 - tjebo
1个回答

7
我看到有两种可能的方法可以帮助产生类似于参考图中所见的垂直字形。
第一种方法是一个变通方法,利用了geom_errorbar()函数。第二种方法涉及将特定数字值传递给shape参数,但需要借助scale_shape_identity()函数。
# Reproducing your data

a <- c(1, 3, 5)
b <- c(2, 4, 6)
df <- data.frame(a, b)

# Let's specify the upper and lower limits manually

df <- df |>
  mutate(
    upper = +0.5 + b,
    lower = -0.5 + b
  )

第一种方法利用了geom_errorbar()函数,只是我们将width = 0以抑制水平线。请注意,我手动设置了上限和下限,并将它们附加到您的数据框中。根据需要调整垂直距离。
# 1st Method

ggplot(data = df, aes(x = a, y = b)) +
  geom_errorbar(aes(ymin = lower, ymax = upper), color = "red", width = 0) +
  theme_classic()

error bar workaround

第二种方法直接利用shape参数。注意,geom_point()函数的shape参数可以容纳各种不同的值。通常使用0到25的形状值,但其他形状也存在。特别地,形状32到127对应于各种ASCII字符。叠加scale_shape_identity()即可通过任何合法的形状值。值73或108应该效果良好。
为了进一步说明,我们传递给shape参数的数字值也被称为ASCII码。特别地,代码73对应于大写字母"I"(即"I"),代码108对应于小写字母"l"(即"l")。在您的图中,这些字母将出现没有衬线(即横杆),将所有点转换为垂直条形。请参见以下演示:
# 2nd Method

ggplot(data = df, aes(x = a, y = b)) + 
  scale_shape_identity() +
  geom_point(shape = 108, size = 10, color = "red") +
  theme_classic()

shape value 108

事实上,传入以下任何一个字符都会产生一条垂直线:"|""l""I"
# Other possible solutions

geom_point(shape = "I")  # ASCII code 73
geom_point(shape = "l")  # ASCII code 108
geom_point(shape = "|")  # ASCII code 124

2
真的没有必要使用除形状和大小之外的不同参数。geom_point(pch = "|", cex = 7)geom_point(shape = "|", size = 7) 是相同的。 - tjebo
1
我可能更倾向于另一种选择 - 使用geom_segment。 - tjebo
1
@tjebo 没错,谢谢。以下内容可以传递给 shape 参数或 pch 参数中的 任何一个"|", "l""I"。第三个例子是多余的,所以我修改了回答。 - Thomas Bilach

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接