ggplot bar,包含分类数据的百分比

时间:2015-11-11 09:57:36

标签: r ggplot2

我的数据是

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())

2 个答案:

答案 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))

enter image description here

并且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)

不过,我不知道如何在个别垃圾箱上添加标签

The Output from R