我看到有两种可能的方法可以帮助产生类似于参考图中所见的垂直字形。
第一种方法是一个变通方法,利用了
geom_errorbar()
函数。第二种方法涉及将特定数字值传递给
shape
参数,但需要借助
scale_shape_identity()
函数。
a <- c(1, 3, 5)
b <- c(2, 4, 6)
df <- data.frame(a, b)
df <- df |>
mutate(
upper = +0.5 + b,
lower = -0.5 + b
)
第一种方法利用了
geom_errorbar()
函数,只是我们将
width = 0
以抑制水平线。请注意,我手动设置了上限和下限,并将它们附加到您的数据框中。根据需要调整垂直距离。
ggplot(data = df, aes(x = a, y = b)) +
geom_errorbar(aes(ymin = lower, ymax = upper), color = "red", width = 0) +
theme_classic()
![error bar workaround](https://istack.dev59.com/bCQiB.webp)
第二种方法直接利用
shape
参数。注意,
geom_point()
函数的
shape
参数可以容纳各种不同的值。通常使用0到25的形状值,但其他形状也存在。特别地,形状32到127对应于各种ASCII字符。叠加
scale_shape_identity()
即可通过任何合法的形状值。值73或108应该效果良好。
为了进一步说明,我们传递给
shape
参数的数字值也被称为ASCII码。特别地,代码73对应于大写字母"I"(即
"I"
),代码108对应于小写字母"l"(即
"l"
)。在您的图中,这些字母将出现没有衬线(即横杆),将所有点转换为垂直条形。请参见以下演示:
ggplot(data = df, aes(x = a, y = b)) +
scale_shape_identity() +
geom_point(shape = 108, size = 10, color = "red") +
theme_classic()
![shape value 108](https://istack.dev59.com/XtgDN.webp)
事实上,传入以下任何一个字符都会产生一条垂直线:
"|"
、
"l"
或
"I"
。
geom_point(shape = "I")
geom_point(shape = "l")
geom_point(shape = "|")
geom_point(shape = "|", size = 7)
是相同的。 - tjebo