【发布时间】:2018-12-22 17:15:08
【问题描述】:
我的数据的最小子集是
mydata <- read.table(header = TRUE, text= "
Product Characteristic Product_category
AA Functional A
AB Functional A
AB Portable A
BA Portable B
BA Quality B
BB Quality B
BA Bright B
BB Sound B
BB Sound B
BC Sound B
BC Sound B
BC Work B
CA Functional C
CA Functional C
CA Functional C
CA Functional C
CB Functional C
CC Functional C
CC Functional C
CC Functional C
CC Functional C
CC Portable C
CC Design C
CD Quality C
CD Quality C
CD Output C
CD Noise C
CD Noise C
CD Component C
CD Component C
")
我想制作 3 个条形图,对应于 3 个产品类别中的每一个,其中 x=Characteristic 和 y 轴具有每个特征的计数。此外,我想将条与 Product 堆叠在一起。因此,假设 Product_category A 的条形图代码是 -
mydata %>% filter(Product_category == "A") %>%
ggplot(aes(x=Characteristic, fill = Product)) + geom_bar(width = 0.2) + coord_flip()
这部分很简单。我在两件事上苦苦挣扎-我想按每个特征的计数降序排列堆叠的条形图。该数据集是我的数据集的最小子集,因此默认情况下,条形图可能显示为有序,但在我的实际数据集中它们不是。我想做的第二件事是用百分比标记每个条形图,以便百分比在每个产品类别内 - 公式 = count(Characteristic)/sum(count(Characteristic))。所以我希望我的最终图表如下所示 -
mydata %>% filter(Product_category == "A") %>%
group_by(Characteristic) %>%
summarize(counts = n()) %>% arrange(counts) %>%
mutate(Characteristic = factor(Characteristic, Characteristic), perc = counts/sum(counts)) %>%
ggplot(aes(x=Characteristic, y = counts)) +
geom_bar(stat = "identity", width = 0.4) +
theme(axis.text.x=element_blank()) +
geom_text(aes(label = paste(round(perc*100, digits = 1),"%",sep = "")), hjust = -0.2, size = 2.8, position = position_dodge(width = 0.7), inherit.aes = TRUE) +
coord_flip()
唯一的区别是我希望每个条都按产品堆叠,这样我就可以直观地看到每个产品在每个特性中的份额。我尝试了很多东西,但每一个都很冗长,仍然没有得到想要的结果。这样做最整洁的方法是什么?
【问题讨论】:
-
我想补充一点,这里还有其他关于添加标签的帖子 - stackoverflow.com/questions/30656846/… 但我的问题是实现条形图和百分比标签的排序,并同时将条形图与 Product 堆叠在一起时间。
标签: r sorting ggplot2 labels stacked