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

如何在pairs2绘图上叠加显示第二个数据框的点集?

在pairs2绘图中叠加第二组点的实现方案

问题背景

需要在pairs2生成的变量两两对比图上,叠加显示来自另一数据框的预定义中心点(该数据框行数远小于主数据框,且每个子图对应的两组变量需匹配对应中心点)。此前用pairs结合kmeans实现过类似效果,但切换到pairs2后,尝试rbind方法报错(提示多余逗号),无法正常叠加。

主数据与中心点数据示例:

df1 <- data.frame(
  TM = c(25.1889,24.1304,24.0604,23.9402,23.7745,23.6654,23.6645,22.8439,21.3716,21.4657,21.2049,17.3545,17.7282,17.4494,12.2787,12.2857,13.1354,8.2202,8.2664,8.6777,6.2524,6.213,6.2178,5.836,5.6775,5.1592,5.0871,5.169,4.1378,4.1378,4.1187,3.2187,3.2187,3.2308,2.568),
  SAM = c(36.1452,35.8868,35.8872,35.874,35.9173,35.9898,36.0154,36.053,35.8427,35.8532,35.829,35.3498,35.4001,35.3643,34.7479,34.7496,34.8415,34.4096,34.4138,34.4416,34.3268,34.3289,34.329,34.3271,34.3303,34.3649,34.3747,34.3936,34.4629,34.4629,34.4649,34.527,34.527,34.5264,34.5909),
  OY = c(206.2866,212.5171,207.3589,205.7436,202.1023,192.1531,190.6164,179.7472,178.2853,176.2884,176.5031,187.4516,183.8077,184.0845,183.0525,179.0316,179.9783,189.5713,185.268,181.5232,206.1538,201.0054,200.9562,200.0553,193.3422,174.8636,169.43,161.9325,149.089,149.089,150.2571,148.2609,148.2609,149.8462,145.8923),
  SIL = c(0.478441942,0.576011972,0.380745706,0.380736114,0.575939073,0.478281445,0.478272244,0.47814645,1.141410862,0.575593193,0.575563169,1.335656023,1.043229301,1.14068256,4.667007731,4.569575097,3.71251671,1.042085277,9.320365185,8.950634348,13.98250042,14.65426647,14.37189781,17.69141471,20.07645471,31.58209857,33.00297051,35.30033062,57.66252594,57.08823677,57.74992561,78.87097909,78.57900854,78.75430906,99.11314727),
  stringsAsFactors = FALSE)


df2 <- data.frame(
  params = c("AA","BB","CC","DD","EE","FF"),
  Ct = c(4.51,2.2,4.67,1.1,0.89,7.3),
  Sa = c(34.25,34.57,34.67,34.73,34.7,34.6),
  Ph = c(1.2,2.09,3.3,2.76,1.89,1.1),
  stringsAsFactors = FALSE)

当前基础绘图代码:

pairs2(df1[1], df1[c(2,3,4)])

解决方案

pairs2(来自TeachingDemos包)支持通过panel参数自定义子图的绘制逻辑,我们可以利用这一点实现两组点的叠加:

1. 对齐变量名

先将df2的变量名与df1对应(根据实际变量映射关系调整):

# 调整df2变量名,与df1的变量匹配
colnames(df2)[2:4] <- c("TM", "SAM", "OY")

2. 自定义绘图面板函数

编写面板函数,先绘制主数据df1的点,再根据当前子图的变量对,取出df2中对应的中心点叠加绘制:

library(TeachingDemos)

custom_panel <- function(x, y, ...) {
  # 绘制主数据点
  points(x, y, col = "black", pch = 16, ...)
  # 获取当前子图的x、y变量名
  x_var <- deparse(substitute(x))
  y_var <- deparse(substitute(y))
  # 检查df2是否包含对应变量,避免报错
  if (x_var %in% colnames(df2) && y_var %in% colnames(df2)) {
    # 叠加绘制中心点,用不同颜色和形状区分
    points(df2[[x_var]], df2[[y_var]], col = "red", pch = 17, cex = 1.2, ...)
  }
}

3. 调用pairs2绘制叠加图

使用自定义面板函数生成带中心点的两两对比图:

# 绘制df1第一列与后三列的对比图,并叠加df2的中心点
pairs2(df1[1], df1[c(2,3,4)], panel = custom_panel)

# 如果需要绘制df1所有变量的两两对比,直接传入df1即可
# pairs2(df1, panel = custom_panel)

错误说明

之前遇到的"多余逗号"错误,是因为pairs2的参数格式与pairs存在差异,直接用rbind合并数据的方式不适用。通过自定义panel函数的方式,绕开了数据合并的问题,直接在每个子图中分别绘制两组数据,能有效避免这类格式错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 16:04:52