使用ggplot2创建的分面饼图

5
我已经用ggplot2制作了一个分面饼图,就像这样:

qplot(x=factor(1), data=mtcars, fill=factor(cyl)) + 
    geom_bar(width=1) +  
    coord_polar(theta="y") + 
    facet_grid(~gear)

在此输入图片描述

但是由于所有的饼图共享 y 轴刻度,一些饼图无法覆盖整个圆。我尝试使用 facet_grid(~gear, scales="free"),但它没有起作用。

我该如何让所有饼图都显示完整的圆?

2个回答

13

我认为你只是想要position='fill'

ggplot(mtcars,aes(x = factor(1),fill=factor(cyl))) + 
    facet_wrap(~gear) + 
    geom_bar(width = 1,position = "fill") + 
    coord_polar(theta="y")

供日后参考,来自geom_bar的详细信息部分:

默认情况下,在同一位置出现的多个x会由position_stack叠加在彼此上方。 如果您想让它们从侧面闪避,请参见position_dodge。 最后,position_fill通过堆叠条形图然后拉伸或压缩到相同高度来显示每个x的相对比例。


4
我觉得在为一个饼图答案点赞时有点内疚。 - IRTFM
公平地说,当省略 coord_polar 时,同样会出现相同的问题。 - Señor O
这部分地解决了问题,因为y轴现在测量的是相对频率,而我想要计数。 - Alfredo Sánchez
@Alf 暂且不论你提出的想法非常糟糕,而且会导致情节非常糟糕,我认为你很难做到这一点,因为 ggplot 不支持在非笛卡尔坐标系中使用自由比例尺。 - joran
当我使用geom_text时,问题重新出现,即使使用position =“fill”。你知道为什么吗@joran? - Will M
更新:当我将position =“fill”输入到geom_text中时,它可以正常工作! - Will M

0
如果您正在寻找另一种方便的方法来完成此操作,可以查看 ggstatsplot 包中的条形图和饼图。
# setup
set.seed(123)
library(ggstatsplot)

# pie chart
ggpiestats(mtcars, gear, cyl)

#> Warning in stats::chisq.test(x = data$main, y = data$condition, correct =
#> FALSE, : Chi-squared approximation may be incorrect

# bar chart
ggbarstats(mtcars, gear, cyl)
#> Warning in stats::chisq.test(x = data$main, y = data$condition, correct =
#> FALSE, : Chi-squared approximation may be incorrect

2019年6月23日创建,使用reprex package (v0.3.0)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接