我正在尝试使用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")
以上代码生成了以下图表。有些人不相信图表。
出于我们的目的,下面的图表可以更好地传达消息。如何创建这样的图表。我的代码在哪里出错了?我已经google了所有的成功。 在此先感谢您的帮助。
答案 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
donut +
coord_polar("y") +
theme_void() +
theme(legend.position="top")