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

如何按id分组批量绘制x-y散点图,按变量z排序并上色?

解决方案

完全可以实现你的需求:为每个个体绘制独立的x-y散点图并在同一画布展示,同时按变量z排序面板,用颜色映射z的取值程度。以下是基于R语言ggplot2和dplyr的实现步骤:

1. 数据预处理

首先加载依赖包,然后对数据按z值排序,将id转换为按z排序的因子,确保后续面板按z的顺序排列:

# 加载所需包
library(ggplot2)
library(dplyr)

# 导入你的数据
dat1.1 <- structure(list(id = c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 
5L, 5L, 5L, 5L, 5L, 5L), index = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 
8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 
1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 
15L, 16L, 17L, 18L, 19L, 20L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 
9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 1L, 
2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 
16L, 17L, 18L, 19L, 20L), x = c(7.443917, 7.520429, 7.446833, 
8.07893, 8.534033, 8.263931, 7.598647, 6.902987, 7.672617, 7.739256, 
7.591341, 8.101125, 7.811751, 6.596834, 6.637652, 8.467165, 7.835399, 
6.500149, 7.083198, 7.531798, 6.110208, 6.368534, 5.26318, 6.735778, 
5.580152, 5.460161, 5.844303, 6.258181, 7.191627, 5.105033, 6.760193, 
5.857215, 5.866264, 6.769086, 6.547294, 5.623804, 4.675815, 6.153901, 
6.040519, 6.236045, 8.216397, 6.097841, 5.491311, 5.831432, 6.297337, 
6.655688, 5.553445, 6.37449, 6.271961, 6.959645, 7.080341, 6.46092, 
6.476955, 7.221111, 6.219023, NA, NA, NA, NA, NA, 8.21752, 7.589581, 
8.363739, 8.849697, 7.78645, 7.494006, 7.827766, 9.11352, 7.80884, 
6.701855, 6.259061, 5.523358, 6.186617, 6.548538, 6.6937, 7.213297, 
5.243428, 7.510827, 7.054297, 7.603241), y = c(106L, 114L, 50L, 
50L, 56L, 46L, 50L, 52L, 114L, 50L, 56L, 26L, 48L, 52L, 48L, 
54L, 54L, 56L, 52L, 50L, 84L, 86L, 88L, 86L, 82L, 84L, 88L, 84L, 
86L, 84L, 86L, 86L, 84L, 84L, 88L, 88L, 88L, 84L, 86L, 120L, 
106L, 168L, 116L, 56L, 108L, 68L, 68L, 70L, 74L, 76L, 76L, 76L, 
72L, 70L, 118L, NA, NA, NA, NA, NA, 60L, 62L, 52L, 90L, 50L, 
50L, 54L, 56L, 52L, 30L, 78L, 30L, 52L, 54L, 52L, 80L, 86L, 46L, 
54L, 84L), z = c(33L, 33L, 33L, 33L, 33L, 33L, 33L, 33L, 33L, 
33L, 33L, 33L, 33L, 33L, 33L, 33L, 33L, 33L, 33L, 33L, 54L, 54L, 
54L, 54L, 54L, 54L, 54L, 54L, 54L, 54L, 54L, 54L, 54L, 54L, 54L, 
54L, 54L, 54L, 54L, 54L, 56L, 56L, 56L, 56L, 56L, 56L, 56L, 56L, 
56L, 56L, 56L, 56L, 56L, 56L, 56L, 56L, 56L, 56L, 56L, 56L, 50L, 
50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 
50L, 50L, 50L, 50L, 50L, 50L)), class = "data.frame", row.names = c(NA, 
-80L))

# 按z值对id排序,转换为因子以固定面板顺序
dat_sorted <- dat1.1 %>%
  group_by(id) %>%
  mutate(z_group = first(z)) %>%  # 每个id的z值一致,取第一个即可
  ungroup() %>%
  arrange(z_group) %>%
  mutate(id = factor(id, levels = unique(id)))

2. 绘制图形

使用分面功能实现个体独立散点图,同时用颜色映射z值:

ggplot(dat_sorted, aes(x = x, y = y, color = z)) +
  geom_point(size = 2, na.rm = TRUE) +  # 忽略NA值,避免绘图报错
  facet_wrap(~id, ncol = 2) +  # 按id分面,设置2列排列
  scale_color_viridis_c(option = "magma") +  # 用连续渐变色展示z的取值程度
  labs(title = "各个体x-y散点图(按z值排序)",
       x = "变量x",
       y = "变量y",
       color = "变量z") +
  theme_bw() +
  theme(
    strip.background = element_rect(fill = "#f5f5f5"),
    plot.title = element_text(hjust = 0.5, size = 14)
  )

关键说明

  • 由于每个id对应的z值完全一致,我们通过提取每个id的z值进行排序,确保面板按z的大小顺序排列。
  • scale_color_viridis_c提供了友好的色盲友好型渐变色,也可以用scale_color_gradient(low = "blue", high = "red")自定义颜色映射。
  • facet_wrap的ncol参数可以根据个体数量调整面板列数,优化展示布局。

内容的提问来源于stack exchange,提问作者cory

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:40:53