在 ggplot2 中绘制饼图

Jet*_*Lag 2 plot r ggplot2 pie-chart

我想绘制一个合适的饼图。但是,本网站之前的大部分问题均来自stat = identity. 如何绘制一个正常的饼图,比如图 2,角度与 的比例成正比cut?我正在使用diamonds来自 ggplot2的数据框。

ggplot(data = diamonds, mapping = aes(x = cut, fill = cut)) + 
    geom_bar(width = 1) + coord_polar(theta = "x")
Run Code Online (Sandbox Code Playgroud)

图一 在此处输入图片说明

ggplot(data = diamonds, mapping = aes(x = cut, y=..prop.., fill = cut)) + 
    geom_bar(width = 1) + coord_polar(theta = "x")
Run Code Online (Sandbox Code Playgroud)

图2 在此处输入图片说明

ggplot(data = diamonds, mapping = aes(x = cut, fill = cut)) + 
    geom_bar()
Run Code Online (Sandbox Code Playgroud)

图3 在此处输入图片说明

www*_*www 5

我们可以先计算每组的百分比cut。我使用这个dplyr包来完成这个任务。

library(ggplot2)
library(dplyr)

# Calculate the percentage of each group
diamonds_summary <- diamonds %>%
  group_by(cut) %>%
  summarise(Percent = n()/nrow(.) * 100)
Run Code Online (Sandbox Code Playgroud)

之后,我们可以绘制饼图。scale_y_continuous(breaks = round(cumsum(rev(diamonds_summary$Percent)), 1))是根据累积百分比设置轴标签。

ggplot(data = diamonds_summary, mapping = aes(x = "", y = Percent, fill = cut)) + 
  geom_bar(width = 1, stat = "identity") + 
  scale_y_continuous(breaks = round(cumsum(rev(diamonds_summary$Percent)), 1)) +
  coord_polar("y", start = 0)
Run Code Online (Sandbox Code Playgroud)

这是结果。

在此处输入图片说明