R语言如何绘制包含多列百分比数据的表格可视化
解决方案
第一步:修正统计代码
你目前无法直接绘图的核心原因是统计阶段直接把数值型占比转成了带%的字符格式,丢失了数值属性,同时原代码的管道符存在语法错误,先修正统计逻辑:
porcentaje.preguntas <- df %>% group_by(Localidad) %>% # 修正原代码错误的管道符 select(Localidad, starts_with("X")) %>% # 统计阶段保留0-1的数值型占比,不要提前转百分比字符串 summarise(across(where(is.numeric), ~ mean(.x, na.rm = TRUE)))
第二步:选择适配的可视化方案
你有309个地区、72个指标,推荐两种常用的可视化方案:
方案1:全局热图(查看所有地区+所有指标的分布)
先把宽表转为长表,再用热图展示全局分布:
library(tidyverse) # 宽表转长表 plot_data <- porcentaje.preguntas %>% pivot_longer(cols = -Localidad, names_to = "问题编号", values_to = "占比") # 绘制热图 ggplot(plot_data, aes(x = 问题编号, y = Localidad, fill = 占比)) + geom_tile(color = "white") + # 填充色用渐变,显示时自动格式化为百分比 scale_fill_viridis_c(labels = scales::percent, limits = c(0, 1)) + theme( axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1, size = 7), axis.text.y = element_text(size = 6) # 地区数量多,调小字号避免重叠 ) + labs(x = "问题编号", y = "地区", fill = "占比")
如果地区太多显示拥挤,可以按地区所属的上级行政区分组后分面展示,或者筛选占比低于阈值的重点地区展示。
方案2:批量生成单指标对比条形图
如果需要单独看每个指标下所有地区的排名对比,可以批量生成所有指标的条形图:
# 批量生成所有指标的对比图 plot_list <- map(unique(plot_data$问题编号), function(cur_q){ plot_data %>% filter(问题编号 == cur_q) %>% ggplot(aes(x = reorder(Localidad, 占比), y = 占比)) + geom_col(fill = "#1f77b4") + scale_y_continuous(labels = scales::percent, limits = c(0, 1)) + coord_flip() + theme(axis.text.y = element_text(size = 5)) + labs(title = paste0("指标", cur_q, "各地区占比对比"), x = "地区", y = "占比") }) # 查看第3个指标的图,替换数字即可查看对应指标 print(plot_list[[3]]) # 如需导出所有图到本地,可配合ggsave批量保存
内容的提问来源于stack exchange,提问作者Juan Jesus
相关产品推荐
相关产品推荐

