使用 position_dodge 时 geom_text 的问题 [英] Issue with geom_text when using position_dodge

查看:31
本文介绍了使用 position_dodge 时 geom_text 的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我看到了这个答案,但无法复制.>

我的数据是这样的:

df = data.frame(x = rep(sample(letters, 4), 2),y = round(runif(8,1,100),0),z = c(rep("group1",4), rep("group2",4)))# 然后我添加一个百分比"列,如下所示:df$perc[1:4] = df$y[1:4]/sum(df$y[1:4])df$perc[5:8] = df$y[5:8]/sum(df$y[5:8])# 然后我像这样转换:df$perc = paste(round(df$perc * 100, 1), "%", sep="")# ggplot:图书馆(ggplot2)ggplot(df) +geom_bar(aes(z, y, fill=x), position="dodge", stat="identity") +geom_text(aes(z,y,label=perc), position=position_dodge(width=1), size=4)

结果:

我不知道我做错了什么.

解决方案

只需一个小改动即可解决问题.您需要在 geom_text(aes(...)) 调用中指定 group=x.

ggplot(df) +geom_bar(aes(z, y, fill=x), position=position_dodge(width=1), stat="identity") +geom_text(aes(z,y,label=perc, group=x), position=position_dodge(width=1), size=4)

I saw this answer but couldn't replicate it.

I get my data like this:

df = data.frame(x = rep(sample(letters, 4), 2), 
                y = round(runif(8,1,100),0), 
                z = c(rep("group1",4), rep("group2",4)))

# I then add a 'percent' column like so:

df$perc[1:4] = df$y[1:4] / sum(df$y[1:4])
df$perc[5:8] = df$y[5:8] / sum(df$y[5:8])

# Which I then convert like so:
df$perc = paste(round(df$perc * 100, 1), "%", sep="")

# The ggplot:
library(ggplot2)

ggplot(df) + 
geom_bar(aes(z, y, fill=x), position="dodge", stat="identity") + 
geom_text(aes(z,y,label=perc), position=position_dodge(width=1), size=4)

Result:

I can't figure out what I did wrong.

解决方案

Just one minor change solves the issue. You need to specify group=x inside your geom_text(aes(...)) call.

ggplot(df) + 
geom_bar(aes(z, y, fill=x), position=position_dodge(width=1), stat="identity") + 
geom_text(aes(z,y,label=perc, group=x), position=position_dodge(width=1), size=4)

这篇关于使用 position_dodge 时 geom_text 的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆