我面临的问题非常简单。
我正在条形图中绘制3种类型的数据,其中Y轴为百分比,并使用数据框中的另一列为每个组着色。
图表如下所示:
用生成
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 = "")
它产生了这个:
数字是正确的,只有它们各自的Y坐标的顺序不正确。如你所见,45%例如是“顶部”数字,而它应该对应于蓝色,而不是绿色。从下到上,我认为geom_text显示红色/蓝色/绿色,而我想要像红色/绿色/蓝色条。
我似乎无法理解我是如何做到这一点的,也不是为什么它不能马上做到。最终目标是将特定颜色分配给Errorcat。我希望Ok为绿色,等待为蓝色,Error为红色。我想要的传奇在上面然后等待错误。
如果有人愿意解释我所缺少的东西......谢谢!
答案 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 = "")
谢谢大家。