如何使用ggplot2在交叉开关顶部添加数据标签

时间:2015-03-09 03:10:30

标签: r ggplot2 position labels

我有一个代码可以很好地绘制数据框中的交叉图,其中条形图的底部和顶部分别代表观察值的最小值和最大值,十字线代表平均值。

现在我被要求在条形图顶部添加平均值的数据标签,这比我想象的要困难。 我尝试使用hjust,vjust,position_dodge和position_stack调整标签位置 - 但没有任何效果,因为我需要

这里有人可以提出建议吗?

编辑 - 可以在以下链接中找到交叉开关图的数据和代码示例:geom_crossbar produces a plot with inappropriate y scale

我对什么不满意?标签遍布各处,我无法将它们放在任何指定的位置。虽然我(我报告的经理)希望他们在酒吧的顶端。

1 个答案:

答案 0 :(得分:0)

这是一个解决方案,使用先前SO问题的数据,将平均值放在方框的顶部,但是低位的两个没有对齐。

my.data <- structure(list(factor1 = structure(c(1L, 1L, 2L, 2L), .Label = c("oil1", "oil2"),
          class = "factor"), factor2 = structure(c(1L, 2L, 1L, 2L), .Label = c("prod1", "prod2"),
          class = "factor"), value = c(1.7, 1, 29.8, 31.3), err = c(1.5, 1, 2, 2),
          min = c(0.2, 0, 27.8, 29.3), max = c(3.2, 2, 31.8, 33.3)), .Names = c("factor1", "factor2",
          "value", "err", "min", "max"), class = "data.frame", row.names = c("1", "2", "3", "4"))

ggplot(data=my.data, aes(x=factor2, fill=factor1)) + 
  geom_crossbar(aes(y=value, ymin=min, ymax=max), position = position_dodge(width = 0.66), width=0.6) +
  geom_text(aes(y = max, label = value, hjust = -0.6, vjust = -0.4))

enter image description here