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]
相关推荐
初学者,亦行者3 小时前
利用pyecharts自动化绘制漏斗图保姆级教程
python·信息可视化·数据分析
邓码农0074 小时前
批量发布 + 数据分析横评|聚媒通、融媒宝、新榜小豆芽、矩阵通优缺点全面拆解
矩阵·数据挖掘·数据分析
小稻穗1 天前
市场调研样本选型坐标系:2026六家国内样本平台能力横向校验
大数据·运维·数据分析
不爱土豆唯爱马铃薯1 天前
我是怎么用MonkeyCode做一个生物多样性数据分析看板的
数据挖掘·数据分析
千瓜1 天前
用户洞察:负鼠走红?解读新世代“动物人格”
大数据·人工智能·数据分析·生活·新媒体
xiaofan6720131 天前
数字经济本科毕业能做数据分析吗?当然可以,但要这样规划才更稳!
数据挖掘·数据分析
Databend1 天前
用 QUALIFY 写出更清晰的窗口函数 SQL
数据库·sql·数据分析
思迈特Smartbi1 天前
BI信创升级案例|思迈特助力幸福人寿构建保险自主可控决策平台
数据分析·smartbi·思迈特软件
杨超越luckly1 天前
Agent应用指南:长三角41城跨城人口流动OD数据分析
python·数据挖掘·数据分析·html·可视化
wang_yb2 天前
当散点图不够用时:用 t-SNE 可视化多维数据
数据分析·databook