R语言中使用ggplot2将多组记录值绘制到同一张图的方法咨询
解决方案
你当前使用的是宽格式数据集,ggplot2更适配长格式数据结构,按以下步骤操作即可把三组数据整合到同一张图里:
- 第一步:先把带
%的录制数据列从字符型转为数值型,否则无法正确映射到坐标轴 - 第二步:把宽表转为长表,将三组Recording数据聚合到同一列,同时新增一列标识所属的录制组别
- 第三步:在ggplot的映射中用颜色/形状区分不同录制组,一次就能画出所有点
# 加载所需包 library(ggplot2) library(dplyr) library(tidyr) # 预处理数据:转换百分比为数值+宽转长 data_long <- data2 %>% # 把百分比字符串转成数值,去掉%后除以100还原比例 mutate(across(starts_with("Recording"), ~as.numeric(sub("%", "", .))/100)) %>% # 宽表转长表 pivot_longer( cols = starts_with("Recording"), names_to = "Recording_Group", values_to = "Percentage" ) # 绘图代码 ggplot(data_long, aes(x=Percentage, y=Specialty, color=Recording_Group, shape=Recording_Group)) + geom_point(size=3) # 调整点大小方便不同组区分
更推荐上述长表方案,代码更简洁,后续调整图例、美化图形的灵活性也更高
如果不想转换数据结构,也可以手动叠加多个geom_point层实现效果,该方案扩展性较差仅作参考:
ggplot(data2, aes(y=Specialty)) + geom_point(aes(x=as.numeric(sub("%", "", `Recording 1`))/100, color="Recording 1"), size=3) + geom_point(aes(x=as.numeric(sub("%", "", `Recording 2`))/100, color="Recording 2"), size=3) + geom_point(aes(x=as.numeric(sub("%", "", `Recording 3`))/100, color="Recording 3"), size=3) + labs(x="Percentage")
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

