R使用ggplot2 / facetting将多个图表(子类别)组合在一个具有相同比例的图表中

时间:2013-09-20 11:27:17

标签: r ggplot2

我有几个类别(A,B,C)和子类别(A01,B01,B02,...)的数据。我希望在一个独特的图表中有按类别划分的子类别(共享相同的比例)。

以下是我的工作流程示例:

library(ggplot2)
library(plyr)

# Create data
subcategory <- c("A01", "A02", "A03", "B01", "B02", "C01", "C02", "D01")
qty <- c(4, 5, 3, 8, 4, 2, 1, 6)
df <- data.frame(subcategory=subcategory, qty=qty)
df$category <- factor(str_extract(df$subcategory, "[A-Z]"))

# Data aggregation
df.ply <- ddply(df, .(subcategory, category), summarize, qty=sum(qty))

# Plotting
plot <- ggplot(df.ply, aes(x=subcategory, y=qty, fill=category))
plot + geom_bar(stat="identity") + facet_grid(category~.) 

所以这个聚合表:

    subcategory category    qty
1   A01         A           4
2   A02         A           5
3   A03         A           3
4   B01         B           8
5   B02         B           4
6   C01         C           2
7   C02         C           1
8   D01         D           6

给我这张照片:

enter image description here

...我想在每个方面只有相应的子类别(删除空的子类别)。这可能与ggplot2一起使用吗?

我应该使用视口和子图而不是刻面吗?关于如何在我的用户名中修改Hadley Wickam的ggplot2书中的指令p146,我很遗憾...

1 个答案:

答案 0 :(得分:1)

只需更改代码的最后一行:

plot + geom_bar(stat="identity") + facet_wrap(~category, scales="free") 

enter image description here

您仍然可以使用facet_grid

plot + geom_bar(stat="identity") + facet_grid(~category, scales="free") 

但是使用facet_wrap会让你选择方面的nrow和ncol。