如何在不使用scale = free的情况下在facet wrap中填充整个饼图

时间:2014-12-12 15:09:37

标签: r scale pie-chart fill facet-wrap

继续上一个问题How to subset or aggregate large amounts of data so I can make separate pie charts

我设法制作了下面的饼图,这很棒,但有没有人知道我可能根据Trip_Set填充饼图?即,大多数Trip_Sets只有一个男性或一个女性,因此它们应该是完全粉红色或蓝色。因为一个有3个(271_6),所以它(最高)作为默认值,所以其他馅饼有空的空间。我知道如果我在条形图中这样做,我可以添加scales = "free",但这不适用于非笛卡尔坐标系...

这是我的数据:

Trip_Set   sex
119_4      hembra
119_4      hembra
119_7      hembra
161_7      macho
193_8      hembra
255_7      macho
271_6      hembra
271_6      macho
271_6      hembra
328_7      hembra
403_3      hembra
428_2      hembra
655_4      hembra

这是我的代码:

pie <- ggplot(dframe2, aes(x=1, y='Trip_Set', fill=sex)) +
  geom_bar(width = 1, stat="identity") +
  ggtitle("Sex ratio per line") +
  coord_polar(theta='y') +
  facet_wrap(~Trip_Set, ncol = 5) 

enter image description here

1 个答案:

答案 0 :(得分:4)

看看这是否是您正在寻找的:

# transform the data
library(dplyr)
dframe2_new = dframe2 %>% group_by(Trip_Set, sex) %>% tally()
# to plot
ggplot(data=dframe2_new, aes(x=factor(1), y=n, fill=sex)) +
  geom_bar(stat="identity", position=position_fill(width=1)) +
  coord_polar(theta="y") +
  facet_wrap(~Trip_Set, ncol=5)

enter image description here

如果您不想要坐标等,可以尝试以下代码

# to plot
ggplot(data=dframe2_new, aes(x=factor(1), y=n, fill=sex)) +
  geom_bar(stat="identity", position=position_fill(width=1)) +
  coord_polar(theta="y") +
  facet_wrap(~Trip_Set, ncol=5) + 
  theme(axis.text = element_blank(),
        axis.ticks = element_blank(),
        panel.grid  = element_blank()) +
  xlab("") +
  ylab("Trip_Set")