ggplot甜甜圈图表并不理想

时间:2018-04-22 09:10:57

标签: r ggplot2 donut-chart

我正在尝试使用ggplot2创建一个圆环图,其中包含以下数据(示例)。

    library(ggplot2)
    library(svglite)
    library(scales)

    # dataframe
    Sex = c('Male', 'Female')
    Number = c(125, 375)
    df = data.frame(Sex, Number)
    df

我用来生成圆环图的代码是

    ggplot(aes(x= Sex, y = Number, fill = Sex), data = df) +
    geom_bar(stat = "identity") +
    coord_polar("y") +
    theme_void() +
    theme (legend.position="top") + # legend position
    geom_text(aes(label = percent(Number/sum(Number))), position = position_stack(vjust = 0.75), size = 3) +
    ggtitle("Participants by Sex")

以上代码生成了以下图表。有些人不相信图表。

enter image description here

出于我们的目的,下面的图表可以更好地传达消息。如何创建这样的图表。我的代码在哪里出错了?我已经google了所有的成功。 在此先感谢您的帮助。 enter image description here

1 个答案:

答案 0 :(得分:2)

它们不在同一个“圈子”中,因为它们具有不同的x值。首先想象它是一个正常的情节(即没有coord_polar("y")),这将变得清晰。你真正想要的是它们设置在相同的x值然后堆叠。在这里,我将x设置为2,因为它会制作一个尺寸合适的“甜甜圈”。

donut <- ggplot(df, aes(x = 2, y = Number, fill = Sex)) +
  geom_col(position = "stack", width = 1) +
  geom_text(aes(label = percent(Number/sum(Number))), position = position_stack(vjust = 0.75), size = 3) +
  xlim(0.5, 2.5) +
  ggtitle("Participants by Sex")

donut

enter image description here

donut +
  coord_polar("y") +
  theme_void() +
  theme(legend.position="top")

enter image description here