在 ggplot2 中绘制饼图
Plotting pie charts in ggplot2
我想绘制一个合适的饼图。但是,该站点之前的大部分问题都来自 stat = identity
。我怎样才能绘制一个像图 2 一样的普通饼图,其角度与 cut
的比例成正比?我正在使用来自 ggplot2 的 diamonds
数据框。
ggplot(data = diamonds, mapping = aes(x = cut, fill = cut)) +
geom_bar(width = 1) + coord_polar(theta = "x")
图 1
ggplot(data = diamonds, mapping = aes(x = cut, y=..prop.., fill = cut)) +
geom_bar(width = 1) + coord_polar(theta = "x")
图2
ggplot(data = diamonds, mapping = aes(x = cut, fill = cut)) +
geom_bar()
图3
我们可以先算出每个cut
组的百分比。我为此任务使用了 dplyr
包。
library(ggplot2)
library(dplyr)
# Calculate the percentage of each group
diamonds_summary <- diamonds %>%
group_by(cut) %>%
summarise(Percent = n()/nrow(.) * 100)
之后,我们就可以绘制饼图了。 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)
这是结果。
这个怎么样?
ggplot(diamonds, aes(x = "", fill = cut)) +
geom_bar() +
coord_polar(theta = "y")
它产生:
我想绘制一个合适的饼图。但是,该站点之前的大部分问题都来自 stat = identity
。我怎样才能绘制一个像图 2 一样的普通饼图,其角度与 cut
的比例成正比?我正在使用来自 ggplot2 的 diamonds
数据框。
ggplot(data = diamonds, mapping = aes(x = cut, fill = cut)) +
geom_bar(width = 1) + coord_polar(theta = "x")
图 1
ggplot(data = diamonds, mapping = aes(x = cut, y=..prop.., fill = cut)) +
geom_bar(width = 1) + coord_polar(theta = "x")
图2
ggplot(data = diamonds, mapping = aes(x = cut, fill = cut)) +
geom_bar()
图3
我们可以先算出每个cut
组的百分比。我为此任务使用了 dplyr
包。
library(ggplot2)
library(dplyr)
# Calculate the percentage of each group
diamonds_summary <- diamonds %>%
group_by(cut) %>%
summarise(Percent = n()/nrow(.) * 100)
之后,我们就可以绘制饼图了。 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)
这是结果。
这个怎么样?
ggplot(diamonds, aes(x = "", fill = cut)) +
geom_bar() +
coord_polar(theta = "y")
它产生: