ggplot2,geom_text和order

时间:2016-11-23 23:40:35

标签: r ggplot2

我面临的问题非常简单。

我正在条形图中绘制3种类型的数据,其中Y轴为百分比,并使用数据框中的另一列为每个组着色。

图表如下所示:

graph

生成

ggplot(cleaned_data, aes(x = Engine, fill = Errorcat)) +
  geom_bar(aes(y = (..count..)/sum(..count..))) +
  scale_y_continuous(labels = percent) + 
  scale_fill_discrete("Events", breaks = c("Ok", "Waiting", "Error")) +
  labs(y = "")

数据已被考虑如下:     cleaning_data $ Errorcat< - factor(cleaning_data $ Errorcat,levels = c(“错误”,“确定”,“等待”))

我只想在每个bin的中间显示相应的百分比。所以我回去了,只是添加了一个geom_text调用,如下所示:

ggplot(cleaned_data, aes(x = Engine, fill = Errorcat)) +
  geom_bar(aes(y = (..count..)/sum(..count..))) +
  geom_text(aes(y = ((..count..)/sum(..count..)) - 0.5*    (((..count..)/sum(..count..))) ,
                label = scales::percent((..count..)/sum(..count..))), stat = "count", vjust = -0.25, check_overlap = TRUE) +
  scale_y_continuous(labels = percent) + 
  scale_fill_discrete("Events", breaks = c("Ok", "Waiting", "Error")) +
  labs(y = "")

它产生了这个:

Graph 2

数字是正确的,只有它们各自的Y坐标的顺序不正确。如你所见,45%例如是“顶部”数字,而它应该对应于蓝色,而不是绿色。从下到上,我认为geom_text显示红色/蓝色/绿色,而我想要像红色/绿色/蓝色条。

我似乎无法理解我是如何做到这一点的,也不是为什么它不能马上做到。最终目标是将特定颜色分配给Errorcat。我希望Ok为绿色,等待为蓝色,Error为红色。我想要的传奇在上面然后等待错误。

如果有人愿意解释我所缺少的东西......谢谢!

1 个答案:

答案 0 :(得分:0)

以上评论的摘要,以下代码生成了正确位置的所有标签,以每个bin为中心:

ggplot(cleaned_data, aes(x = Engine, fill = Errorcat)) +
  geom_bar(aes(y = (..count..)/sum(..count..))) +
  geom_text(aes(y = (..count..)/sum(..count..), label = scales::percent((..count..)/sum(..count..))),
            stat = "count", check_overlap = FALSE, position = position_stack(vjust = 0.5)) +
  scale_y_continuous(labels = percent) + 
  scale_fill_discrete("Events", breaks = c("Ok", "Waiting", "Error")) +
  labs(y = "")

谢谢大家。