删除NA会更改带有facet_grid的ggplot中的条形图宽度

1szpjjfi  于 2023-03-05  发布在  其他
关注(0)|答案(1)|浏览(121)

我将答案绘制在条形图中,当我使用整个数据集(包括NA)时,这个条形图看起来很不错:

anm$Q42<-factor(anm$Q42,levels=c('once_per_week','once_per_month',
                                 'once_per_6months','once_per_year'))
ggplot(data = anm, aes(x=Q42,fill=District)) +
  geom_bar() +
  scale_x_discrete(drop=F)+
  scale_fill_discrete(drop=F)+
  labs(title="Animal health providers", 
       subtitle='n=3',x="", y="Count") +
  facet_grid(~Q2)+
  ylim(0,6)+
  theme(axis.text.x = element_text(angle = 90, hjust=1),
        plot.title = element_text(face='bold'),
        text=element_text(size=10))+
  stat_count(geom='text',aes(label = ..count..,group=1),vjust=-2,size=2)+
  stat_count(geom='text',aes(label = paste0("(",round(..count..*100/3,1),"%",")"),group=1),vjust=-0.5,size=2)

但是,当我在ggplot中使用子集数据集来删除NA答案时,条形宽度增加,图如下所示:

ggplot(data = na.omit(anm), aes(x=Q42,fill=District)) +
  geom_bar() +
  scale_x_discrete(drop=F)+
  scale_fill_discrete(drop=F)+
  labs(title="Animal health providers", 
       subtitle='n=3',x="", y="Count") +
  facet_grid(~Q2)+
  ylim(0,6)+
  theme(axis.text.x = element_text(angle = 90, hjust=1),
        plot.title = element_text(face='bold'),
        text=element_text(size=10))+
  stat_count(geom='text',aes(label = ..count..,group=1),vjust=-2,size=2)+
  stat_count(geom='text',aes(label = paste0("(",round(..count..*100/3,1),"%",")"),group=1),vjust=-0.5,size=2)

为什么会发生这种情况,如何阻止它??当我在绘图前对数据进行子集化时,当我使用facet_wrap或当我将space='free'添加到facet_grid时,也会发生这种情况。
以下是示例数据集:

District<-c('Ngorongoro','Ngorongoro','Ngorongoro','Misungwi','Misungwi','Mwanga')
Q2<-rep('Retail outlet', 6) 
Q42<-c('once_per_month','once_per_year','once_per_month',NA,NA,NA)
anm<-as.data.frame(cbind(District,Q2,Q42))
hgb9j2n6

hgb9j2n61#

我问了ChatGPT,它实际上给了我一个可用的答案(我很惊讶!)。
仍然不知道为什么会发生这种情况,但通过在geom_bar中指定width=0.9,我可以纠正条形图宽度。
这个办法奏效了:

ggplot(data = na.omit(anm), aes(x=Q42,fill=District)) +
  geom_bar(width=0.9) +
  scale_x_discrete(drop=F)+
  scale_fill_discrete(drop=F)+
  labs(title="Animal health providers", 
       subtitle='n=3',x="", y="Count") +
  facet_grid(~Q2,space='free')+
  ylim(0,2.5)+
  theme(axis.text.x = element_text(angle = 90, hjust=1),
        plot.title = element_text(face='bold'),
        text=element_text(size=10))+
  stat_count(geom='text',aes(label = ..count..,group=1),vjust=-2,size=2)+
  stat_count(geom='text',aes(label = paste0("(",round(..count..*100/3,1),"%",")"),group=1),vjust=-0.5,size=2)

相关问题