我的数据是
Category Produkt.Segment
A bundle
A digital
B digital
B digital
B bundle
C digital
D bundle
D bundle
D digital
D bundle
如何通过变量'Category'的Product.Segment以百分比形式制作ggplot-bar facet wrap(最好在条形图的顶部添加标签)? 任何的想法? 我尝试过这样的事情:
ggplot(df, aes(Category))+
geom_bar(fill="grey40")+scale_x_discrete()+
theme(panel.background = element_rect(fill = "lightblue"))+
ggtitle("Categories by Produkt Segments")+
ylab("Frequency")+
xlab("Category")+
facet_grid(~Produkt.Segment)+
scale_y_continuous(labels=percent_format())
答案 0 :(得分:1)
试试:
all <- read.table(header = TRUE, stringsAsFactors = FALSE, text = "
Category Produkt.Segment
A bundle
A digital
B digital
B digital
B bundle
C digital
D bundle
D bundle
D digital
D bundle")
ggplot(aes(x = Category, y = Produkt.Segment), data = all) + geom_histogram(aes(y = ..count../sum(..count..) * 100, fill = Produkt.Segment))
并且wrap
代表
ggplot(aes(x = Category, y = Produkt.Segment), data = all) + geom_histogram(aes(y = ..count../sum(..count..) * 100, fill = Produkt.Segment)) +
facet_wrap(~Produkt.Segment)
如果你想拥有每组的百分比,我会这样做,但我确信这里有些人可以用更简单的方式做到这一点
library(dplyr)
all1 <- group_by(all, Produkt.Segment, Category) %>% arrange(Produkt.Segment) %>% summarise(il = n()) %>% ungroup() %>%
group_by(Produkt.Segment) %>% mutate(per = il/sum(il))
ggplot(aes(x = Category, y = per), data = all1) + geom_histogram(stat = "identity") +
facet_wrap(~Produkt.Segment) + ylab("Percent")
答案 1 :(得分:0)
感谢您对@ Mateusz1981的贡献,是的,使用dplyr软件包进行数据操作,我可以达到预期的效果,但是,我最接近的是&#39;干净切割&#39;解决方案是:
ggplot(aes(x = Category, y = Produkt.Segment, fill=Produkt.Segment), data = all)+geom_bar(aes(y = ..density.., group=Produkt.Segment), binwidth = 25)+facet_grid(.~Produkt.Segment)+theme(legend.position="none")+ggtitle("Product Segments")+ylab("[n]")+xlab("Category")+scale_y_continuous(labels = percent)
不过,我不知道如何在个别垃圾箱上添加标签