📅  最后修改于: 2023-12-03 15:38:24.633000             🧑  作者: Mango
ggplot2 是一个基于语法的绘图工具,可用于创建各种图表类型,包括饼图。在这个指南中,我将向您展示如何使用 ggplot2 在 R 中创建带有百分比标签的饼图。
首先,我们需要准备一些模拟数据来演示。以下是一个简单的数据框,其中包含了一些收入类别和相应的支出金额。
set.seed(123)
df <- data.frame(
category = c("Housing", "Transportation", "Food", "Entertainment", "Other"),
amount = abs(rnorm(5, 5000))
)
df
接下来,我们将使用 ggplot2
包中的 geom_bar
函数来创建饼图。我们需要将数据框传递给 ggplot
函数,并使用 aes
函数来指定我们要绘制的图表元素。
library(ggplot2)
ggplot(df, aes(x = "", y = amount, fill = category)) +
geom_bar(stat = "identity", width = 1) +
coord_polar(theta = "y") +
theme_void() +
scale_fill_hue(labels = df$category)
首先,我们调用 ggplot
函数并指定我们要使用 df
中的数据。我们使用 aes
函数指定我们要绘制的图表元素: x = ''
表示我们不想在 x 轴上显示任何标签, y = amount
表示我们要用 amount
列来绘制饼图。最后,我们使用 fill = category
来指定我们要将数据按 category
列进行分组。
接下来,我们添加 geom_bar
函数,并将 stat
参数设置为 identity
。这告诉 ggplot2 我们想要以每个类别中的 amount
列中的实际值来绘制条形。我们设置 width = 1
来确保饼图的饼厚度适当。
然后,我们使用 coord_polar
函数将坐标系转换为极坐标。这是饼图的基本要求。
接下来,我们调用 theme_void
函数来移除默认 ggplot2 主题中的所有图形元素,只留下坐标系。
最后,我们使用 scale_fill_hue
函数来指定饼图中使用的颜色,以及 labels
参数来指定每个类别的标签。
我们已经创建了一个基本的饼图。接下来,我们将添加一些带有百分比标签的注释,以便更好地描述数据。
ggplot(df, aes(x = "", y = amount, fill = category)) +
geom_bar(stat = "identity", width = 1) +
coord_polar(theta = "y") +
theme_void() +
geom_text(aes(label = paste(round(amount/sum(amount) * 100), "%"),
x = 1.3 * cos((cumsum(amount) - 0.5 * amount) / sum(amount) * 2 * pi),
y = 1.3 * sin((cumsum(amount) - 0.5 * amount) / sum(amount) * 2 * pi)),
size = 4, fontface = "bold") +
scale_fill_hue(labels = df$category)
此代码与之前的代码非常相似,但有两个新元素。首先,我们使用 geom_text
函数为每个饼块添加标签。我们使用 paste
函数将百分比与标签串联在一起,并使用 round
函数将结果四舍五入到整数。
然后,我们使用三角函数和 cumsum
函数计算出每个标签的位置。具体来说,对于每个饼块,我们计算出其总和的中心角度,并将其减去该饼块实际值的一半,以计算出该饼块的起始角度。然后,我们将该角度除以总和的 2π,并乘以三角函数,使其与极坐标对应。
最后,我们设置 size
参数来调整标签的大小,以及 fontface
参数来使其更清晰易读。
至此,我们已经创建了一个带有百分比标签的饼图!