如何将intp.trust_male与intp.trust_fem两个数值变量绘制在同一张图中
问题解决方案
合并失败原因
两个待合并的 tibble 列名完全一致(均为average_intp.trust),且无公共匹配主键,merge()默认按同名列做等值匹配,两个数值2.33、2.34不相等,最终合并结果为空。
合并方案
根据你的可视化需求选择对应合并方式:
- 若要做性别维度的指标对比(如柱状图、箱线图),选择长表合并方案:
library(tidyverse) # 新增性别分组列后按行合并 Q5 <- bind_rows( intp.trust_male %>% mutate(gender = "男性"), intp.trust_fem %>% mutate(gender = "女性") )
- 若要做两个指标的关联分析(如散点图),选择宽表合并方案:
# 生成分别存储两性指标的独立列 Q5 <- tibble( male_trust = intp.trust_male$average_intp.trust, female_trust = intp.trust_fem$average_intp.trust )
如果你实际的数据是带空间属性的分区域统计数据,两个表均包含地区ID/空间几何列作为公共主键,可指定匹配字段合并:
# 假设公共主键为region_id,合并后自动给同名字段加后缀区分性别 Q5 <- merge(intp.trust_fem, intp.trust_male, by = "region_id", suffixes = c("_female", "_male"))
可视化代码修正
你原有代码调用了geom_sf()空间图层,还引用了不存在的percent_owned字段,和你要展示的信任度指标不匹配。如果是要对比两性平均信任度,参考可视化代码:
# 基于长表方案绘制分组柱状图 ggplot(Q5, aes(x = gender, y = average_intp.trust, fill = gender)) + geom_col(width = 0.6) + scale_fill_viridis_d() + labs(x = "性别", y = "平均信任度", fill = "性别") + theme_minimal()
如果确实需要绘制空间可视化图,确认合并后的Q5包含空间几何列以及你要映射给填充色的指标字段,再调整aes()中的fill映射即可。
内容的提问来源于stack exchange,提问作者Kexin Ni
相关产品推荐
相关产品推荐

