我正在尝试制作一些复杂数据的箱线图。我已经按一个特定字段(而不是类字段)对类进行了排序,现在希望能够使用该排序字段的值标记每个框。我从数据结构的方式知道,这个sort-by属性的值对于类中的每个观察都是相同的,我想基本上用这个额外的信息来注释图表。
我想通过在绘图中添加点图层然后标记这些点来尝试实现此目的。我试图使用像这个例子这样的代码来实现这一点,我使用mtcars
数据集进行了模拟,以实现可重现性。为了这个例子,假设变量gears
对于cyl
的每个不同值都是相同的。 “gear / 1000000”部分只是为了让所有标签都靠近轴。
mtcars %>% group_by(cyl) %>%
ggplot(aes(x = reorder(cyl, gear), y = mpg)) +
geom_point(show.legend = FALSE, aes(x = reorder(cyl, gear), y = gear/1000000)) +
geom_text(aes(label = gear)) +
geom_boxplot(aes(colour=carb),varwidth = TRUE)
我觉得这很接近,但是这段代码将标签放在箱图上而不是点上,这与我正在寻找的相反。我如何要求ggplot仅标记来自geom_point()
的点?或者有更简单的方法来实现我的目标吗?
修改 这是我的情节现在的样子,感谢下面提供的答案。 Boxplots of IRI distribution for various pavement segments
答案 0 :(得分:0)
为geom_text
设置单独的x和y aes。在你的代码中,你正在绘制aes中每个x,y的标签(x = reorder(cyl,gear),y = mpg),因为这是在父ggplot中设置的aes。相反,在geom_point
内设置一个固定的y(偏离geom_point
y值的给定量)和x(对应于geom_text
的x值):
例如(注意:如您所述,每个气缸的齿轮值不止一个)
mtcars %>% group_by(cyl) %>%
ggplot(aes(x = reorder(cyl, gear), y = mpg)) +
geom_point(show.legend = FALSE, aes(x = reorder(cyl, gear), y = gear/1000000)) +
geom_boxplot(aes(colour=carb),varwidth = TRUE) +
geom_text(aes(label = gear, x = reorder(cyl, gear), y = gear/1000000 - 2))