You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 19:54:03