如何在R中用不同大小气泡可视化调查答案频率及识别图表类型
图表名称
这种以气泡大小对应调查答案频率的可视化图表,通常称为类别频率气泡图(也可直接称频率气泡图),这类图表常用于民意调查场景,通过气泡面积直观呈现不同选项的占比差异,皮尤研究中心等机构常使用这类图表简化数据对比。
R语言复现方法
可以用ggplot2包快速实现,以下是具体步骤和示例代码:
1. 准备数据
先构造模拟的调查数据,包含选项名称和对应频率:
library(ggplot2) # 模拟调查数据 survey_data <- data.frame( answer = c("非常满意", "满意", "一般", "不满意", "非常不满意"), frequency = c(25, 35, 20, 12, 8) # 对应各选项的占比/频率 )
2. 绘制基础气泡图
核心用geom_point(),通过size参数绑定频率数值,为让气泡面积和频率成正比,可对频率做开方处理:
ggplot(survey_data, aes(x = answer, y = 1, size = sqrt(frequency))) + geom_point(color = "#2d4059", alpha = 0.8) + # 设置气泡颜色与透明度 scale_size_continuous(range = c(6, 22), # 控制气泡大小范围 name = "占比(%)") + # 图例名称 theme_minimal() + theme( axis.title.y = element_blank(), # 隐藏y轴标题 axis.text.y = element_blank(), # 隐藏y轴刻度 axis.ticks.y = element_blank(), # 隐藏y轴刻度线 panel.grid = element_blank() # 隐藏网格线 ) + labs( x = "调查选项", title = "调查答案频率气泡图" )
3. 优化细节(可选)
若要在气泡上标注具体频率数值,添加geom_text()即可:
ggplot(survey_data, aes(x = answer, y = 1, size = sqrt(frequency))) + geom_point(color = "#2d4059", alpha = 0.8) + geom_text(aes(label = paste0(frequency, "%")), size = 4, color = "white") + # 标注百分比 scale_size_continuous(range = c(6, 22), name = "占比(%)") + theme_minimal() + theme( axis.title.y = element_blank(), axis.text.y = element_blank(), axis.ticks.y = element_blank(), panel.grid = element_blank() ) + labs( x = "调查选项", title = "带数值标注的调查频率气泡图" )
补充说明
- 用
sqrt(frequency)绑定size,是为了让气泡面积严格和频率数值成正比(默认size对应半径,直接用频率会导致面积差距过大) - 可根据需求调整配色、字体、主题样式,匹配皮尤研究中心的沉稳风格
内容的提问来源于stack exchange,提问作者marina
相关产品推荐
相关产品推荐

