我想制作一个类似于此的图形:
我从这段代码开始:
library(ggplot2)
library(scales) #needed for labels=percent
var1 <- sample(0:20,78,replace = TRUE)
var2 <- cut(var1, breaks = seq(0,20,5),include.lowest = TRUE)
df<-as.data.frame(var2)
ggplot(df, aes(x= var2)) +
geom_bar(aes(y = ..prop..,group=1),fill="dodgerblue3")+
scale_y_continuous(labels=percent)+
labs(x = NULL,y = NULL)+
theme(axis.ticks.x = element_blank(),
axis.text = element_text(size=7))
但是我无法将标签放在情节中。
我试图关注this example:
ggplot(df, aes(x= var2, group=1)) +
geom_bar(aes(y = ..density..)) +
geom_text(aes( label = format(100*..density.., digits=2, drop0trailing=TRUE),
y= ..density.. ), stat= "bin", vjust = -.5) +
scale_y_continuous(labels=percent)
但是我得到了这个错误(我使用ggplot2-version 2.0.0):
错误:StatBin需要一个连续的x变量x变量是离散的。也许你想要stat =&#34; count&#34;?
最后我用这段代码制作了剧情:
per <- df %>% group_by(var2) %>% summarise(freq = n()/nrow(df))
ggplot(data=per, aes(x=var2,y=freq)) +
geom_bar(stat="identity",fill="dodgerblue3")+
geom_text(aes(label=percent(freq)),vjust=1.5,colour="white")+
scale_y_continuous(labels=percent)+
labs(x = NULL,y = NULL)+
theme(axis.ticks.x = element_blank(),
axis.text = element_text(size=7))
但是,是否可以将其设为this example,而不需要per
数据框并直接在ggplot中?
答案 0 :(得分:4)
你可以试试这个,取自here并自定义。
ggplot(df, aes(factor(var2))) +
geom_bar(fill="dodgerblue3")+
labs(x = NULL,y = NULL)+
stat_bin(aes(label = paste(prop.table(..count..) * 100, "%", sep = "")),
vjust = 1, geom = "text", position = "identity", color ="white")
修改强>
在新的ggplot 2.0.X版本中,应使用stat_count
而不是stat_bin
。来自help
stat_count,它计算每个x posotion的个案数, 没有装箱。它适用于离散和连续x 数据,而stat_bin仅适用于连续的x数据。
ggplot(df, aes(factor(var2))) +
geom_bar(fill="dodgerblue3")+
labs(x = NULL,y = NULL)+
stat_count(aes(label = paste(prop.table(..count..) * 100, "%", sep = "")),
vjust = 1, geom = "text", position = "identity", color ="white")