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

使用ggplot2 stat_density_2d(数值求和而非计数)绘制密度图及偏差分析

没问题,我来帮你一步步实现这个需求!下面是具体的R代码和思路说明:

第一步:数据聚合计算偏差值

首先我们需要把重复的(X,Y)坐标点聚合起来,计算每个点的响应总和(也就是你说的整体偏差)。这里用dplyr来做数据处理会很方便:

# 加载需要的包
library(dplyr)
library(ggplot2)

# 假设你的数据集叫df,X/Y坐标列名为x_pos、y_pos,响应列名为response
# 聚合每个坐标点的响应总和
aggregated_data <- df %>%
  group_by(x_pos, y_pos) %>%
  summarize(total_deviation = sum(response), .groups = "drop")

这里的total_deviation就是每个坐标点的整体偏差:如果总和为正,说明该位置“是”的响应更多;总和为负则“否”的响应占主导。

第二步:绘制加权的2D密度图

默认的stat_density_2d是按点的计数来计算密度的,我们需要通过weight参数指定用total_deviation作为权重,这样密度统计就基于数值求和而非点的数量了:

ggplot(aggregated_data, aes(x = x_pos, y = y_pos)) +
  # 用填充多边形展示密度,weight参数指定加权依据
  stat_density_2d(
    aes(fill = stat(density), weight = total_deviation),
    geom = "polygon",
    alpha = 0.7  # 调整透明度,避免图层重叠遮挡
  ) +
  # 用viridis颜色渐变,可读性更好
  scale_fill_viridis_c(option = "plasma", name = "加权密度") +
  # 添加标题和坐标轴标签
  labs(
    x = "测试图像X坐标",
    y = "测试图像Y坐标",
    title = "基于响应偏差的2D密度分布图"
  ) +
  # 用简洁的主题
  theme_minimal()

额外调整建议

  • 如果你想要展示等高线而非填充区域,可以把geom = "polygon"改成geom = "contour",还可以同时添加填充和等高线来增强可视化效果;
  • 如果你的列名和示例不一样,记得把代码里的x_pos、y_pos、response替换成你数据集里的实际列名;
  • 可以调整scale_fill_viridis_c里的option参数切换颜色方案,比如"magma"、"inferno"都是不错的选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:22:01