如何在R中创建特定气泡图并统计行业Top5出现次数
问题:统计行业在对应区县Top5雇主列表的出现次数并绘制气泡图
需求说明
- 核心目标:新增一列,统计每个
industry1在对应cnty1的Top5雇主列表中出现的次数 - 气泡图要求:
- 横轴:升序排列的
cnty1(区县代码) - 纵轴:行业进入Top5雇主列表的总次数
- 不同行业用不同颜色的点区分
- 点的大小:对应行业在该
cnty1下进入Top5的次数(例如cnty='003'的每个点数值标签为1,因各行业每季度仅在Top5中出现1次)
- 横轴:升序排列的
样本数据及预处理代码
year1 <- c(2020,2020,2020,2020,2020,2020,2020,2020,2020,2020,2020,2020,2020,2020,2020,2020) qtr1 <- c(01,01,01,01,01,01,01,01,02,02,02,02,02,02,02,02) cnty1 <- c(003,003,001,003,031,031,003,005,001,003,003,007,031,001,003,017) employment1 <- c(140,251,25,36,99,8415,2514,33141,20,14,185,220,336,901,12,5) industry1 <- c(312,312,721,721,912,312,514,541,651,721,722,722,612,613,615,312) dfemp <- data.frame(year1,qtr1,cnty1,employment1,industry1) dfemp$date<- ymd(paste(dfemp$year1,dfemp$qtr1,"1",sep="-")) dfemp <- dfemp %>% arrange(desc(date)) %>% group_by(date)%>%slice_max(order_by = employment1,n=5)
解决方案
1. 新增行业出现次数统计列
在预处理后的数据集基础上,按区县和行业分组计数,同时计算每个行业的总上榜次数:
library(dplyr) library(lubridate) library(ggplot2) # 统计各行业在对应区县的Top5出现次数,及行业总上榜次数 dfemp_count <- dfemp %>% ungroup() %>% # 取消原date分组 group_by(cnty1, industry1) %>% summarise(count_top5 = n(), .groups = "drop") %>% group_by(industry1) %>% mutate(total_count = sum(count_top5)) %>% # 行业总上榜次数(纵轴数据) ungroup() %>% mutate(cnty1 = factor(cnty1, levels = sort(unique(cnty1)))) # 横轴按区县代码升序排列
2. 绘制气泡图
用ggplot2实现符合要求的可视化:
ggplot(dfemp_count, aes(x = cnty1, y = total_count)) + geom_point(aes(color = factor(industry1), size = count_top5), alpha = 0.7) + geom_text(aes(label = count_top5), vjust = -0.5, size = 3) + # 添加次数标签 scale_size(range = c(3, 8)) + # 调整气泡大小范围 labs( x = "区县代码", y = "行业进入Top5雇主列表的总次数", color = "行业代码", size = "该区县下行业进入Top5的次数", title = "行业在各区县Top5雇主列表的出现情况" ) + theme_minimal() + theme(axis.text.x = element_text(angle = 45, hjust = 1))
关键逻辑说明
group_by(cnty1, industry1) %>% summarise(count_top5 = n()):核心统计逻辑,计算每个行业在对应区县的Top5上榜次数mutate(cnty1 = factor(...)):强制横轴按区县代码升序排列,避免默认的字母排序- 气泡大小映射
count_top5,颜色映射行业代码,同时添加数值标签直观展示次数
内容的提问来源于stack exchange,提问作者Tim Wilcox
相关产品推荐
相关产品推荐

