ggplot_比例表现02

单变量比例分布

条形图、堆叠条形图、并排条形图可以用来表现比例以及分组内的比例。 饼图经常用来表现单个分组方式的各组比例。

ggplot2没有专门的饼图函数, 可以用geom_col()与coord_polar()配合

R 复制代码
library(ggplot2)
library(ggridges)
library(dplyr)
library(GGally)

iris = read.csv('../../seaborn-data/iris.csv')
tips = read.csv('../../seaborn-data/tips.csv')
复制代码
Attaching package: 'dplyr'


The following objects are masked from 'package:stats':

    filter, lag


The following objects are masked from 'package:base':

    intersect, setdiff, setequal, union
R 复制代码
tips_day_count <- tips |>
  select(day) |>
  count(day) |>
  mutate(ratio = n)

p <- ggplot(data = tips_day_count,mapping = aes(x = 1,y=ratio,fill=day))

p + geom_col() + coord_polar(theta = "y") +
  scale_x_continuous(name = NULL, breaks = NULL) +
  scale_y_continuous(name = NULL, breaks = NULL) +
  labs(fill = "Cut")

当然也可以用R自带的pie函数绘制饼图

R 复制代码
piepercent = paste(round(100*tips_day_count$n/sum(tips_day_count$n)), "%")
pie(tips_day_count$n,labels=piepercent,col=rainbow(12))
legend("topright", tips_day_count$day, cex=0.8, fill=rainbow(12))

再粗糙点,直接用geom_col(postion='stack),也能达到饼状图的表达效果

R 复制代码
p + geom_col(position = 'stack')

有时需要比较不同组的某个变量的比例分布。

R 复制代码
ggplot(data = tips,mapping = aes(x = day,y=total_bill,fill=sex))+geom_col(position = 'dodge')
R 复制代码
ggplot(data = tips,mapping = aes(x = total_bill,fill=day))+geom_density(position = 'fill')
R 复制代码
ggplot(data = tips,mapping = aes(x = total_bill,fill=day))+geom_density_line(alpha=0.5,mapping = aes(y=..count..))

嵌套比例分布的比较

马赛克图是另外一种表现列联表频数的图形, 用色块面积表示每个交叉类的频数。 与堆叠条形图相比, 这里用了条形宽度而不是条形高度表示大类频数。

R 复制代码
tips_day_count <- tips |>
  count(day,smoker)|>
  group_by(day) |>
  mutate(ratio = sum(n))

ggplot(tips_day_count,aes(y=n,x=day,width=ratio,fill=smoker))+
  geom_col(position = 'fill')+
  facet_grid(~day,scales = "free_x",space = "free_x")
R 复制代码
tips |>
  count(day,smoker)|>
  group_by(day) |>
  mutate(ratio = sum(n))

| day | smoker | n | ratio |

<chr> <chr> <int> <int>
Fri No 4 19
Fri Yes 15 19
Sat No 45 87
Sat Yes 42 87
Sun No 57 76
Sun Yes 19 76
Thur No 45 62
Thur Yes 17 62
[A grouped_df: 8 × 4]
相关推荐
杨超越luckly11 小时前
Agent应用指南:获取12306官网全量站点及其编码信息
python·数据挖掘·数据分析·可视化·12306
十三画者13 小时前
【文献分享】SIMBA:单细胞嵌入与特征共学习
人工智能·信息可视化·数据挖掘·数据分析·数据可视化
数模竞赛Paid answer17 小时前
2021年深圳杯数学建模C题配电网可靠性和故障软自愈研究解题全过程论文及程序
算法·数学建模·数据分析·深圳杯
weitao_6661 天前
电商商品 CSV 导入校验:把脏字段挡在 AI 客服与上架前
数据分析
极昆仑智慧2 天前
智能问数五级成熟度模型:从“能问“到“能协作“的演进路径
人工智能·语言模型·数据分析
Patrick在香港2 天前
Claude API + Python:香港MPF基金回报率自动化分析框架
windows·python·数据分析·自动化·github·ai编程·数据可视化
学掌门2 天前
超级菜鸟怎么学习数据分析?
python·学习·数据分析
数模竞赛Paid answer2 天前
2026年华数杯数学建模A题微构体中填充导电介质的仿真优化解题全过程及程序
数学建模·数据分析·华数杯
数模竞赛Paid answer2 天前
2021年深圳杯数学建模B题背向瑞利散射光纤激光传感器设计解题全过程论文及程序
数学建模·数据分析·深圳杯
追风少年ii2 天前
课前准备--蛋白质PDB文件与PDBQT文件的格式与区别
数据库·数据分析·分子动力学·分子对接