ggplot2标签只指向一层

时间:2017-03-06 20:12:38

标签: r ggplot2

我正在尝试制作一些复杂数据的箱线图。我已经按一个特定字段(而不是类字段)对类进行了排序,现在希望能够使用该排序字段的值标记每个框。我从数据结构的方式知道,这个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)

Output of my code

我觉得这很接近,但是这段代码将标签放在箱图上而不是点上,这与我正在寻找的相反。我如何要求ggplot仅标记来自geom_point()的点?或者有更简单的方法来实现我的目标吗?

修改 这是我的情节现在的样子,感谢下面提供的答案。 Boxplots of IRI distribution for various pavement segments

1 个答案:

答案 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))