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

使用Viridis、ggplot2与ggmarginal绘制带配色的Bland-Altman图问题

解决Bland-Altman图的Viridis配色与ggMarginal连续密度图问题

我来帮你调整代码,实现按A1_video或A1_phones的数值给点分配连续Viridis配色,同时搭配对应的连续密度边际图:

第一步:整理数据(更规范的列名)

先把数据框的列名改得清晰易懂,避免在ggplot里反复使用a1$:

# 计算差值相关变量
diff <- a1$A1_phones - a1$A1_video
diffp <- (a1$A1_phones - a1$A1_video)/a1$A1_video*100
sd.diff <- sd(diff)
sd.diffp <- sd(diffp)

# 构建规范的数据框
my.data <- data.frame(
  video = a1$A1_video,
  phones = a1$A1_phones,
  diff = diff,
  diffp = diffp
)

第二步:绘制带连续Viridis配色的Bland-Altman主图

这里我们把点的颜色映射到video(你也可以换成phones)的连续数值,用scale_color_viridis_c()实现Viridis连续配色,同时优化坐标轴范围避免截断数据:

diffplot <- ggplot(my.data, aes(x = video, y = diff)) +
  # 把颜色映射到video的连续值,设置透明度避免点重叠
  geom_point(aes(colour = video), size = 2, alpha = 0.5) +
  theme_bw() +
  # 用coord_cartesian替代ylim,仅调整显示范围不过滤数据
  coord_cartesian(ylim = c(mean(diff) - 7*sd.diff, mean(diff) + 7*sd.diff)) +
  # 添加Bland-Altman的参考线
  geom_hline(yintercept = 0, linetype = 3) +
  geom_hline(yintercept = mean(diff)) +
  geom_hline(yintercept = mean(diff) + 2*sd.diff, linetype = 2) +
  geom_hline(yintercept = mean(diff) - 2*sd.diff, linetype = 2) +
  # 设置标签和图例名称
  labs(
    y = "Difference Video vs Algorithm [ms]",
    x = "Average of Video vs Algorithm [ms]",
    colour = "Video Measurement [ms]"
  ) +
  # 应用Viridis连续配色方案,option可选"viridis"/"plasma"/"magma"等
  scale_color_viridis_c(option = "viridis")

第三步:添加Viridis配色的连续密度边际图

把ggMarginal的类型改成"density"实现连续密度图,同时用Viridis颜色填充,保证和主图配色风格统一:

library(viridis)
p <- ggMarginal(diffplot, 
                type = "density", 
                # 用Viridis渐变填充密度图,alpha调整透明度
                fill = viridis(100, option = "viridis"), 
                colour = "white", # 密度图边框设为白色提升可读性
                alpha = 0.7)
p

关键改动说明

  • 颜色映射逻辑:将点的颜色绑定到video/phones的连续数值,用scale_color_viridis_c()替代你原来的离散型配色,完美适配连续变量的配色需求。
  • 坐标轴优化:用coord_cartesian替代ylim,避免过滤掉超出显示范围的点,这对Bland-Altman图的完整性很重要。
  • 边际图适配:将边际图类型从直方图改为密度图,并用Viridis渐变填充,和主图的配色风格保持一致,实现视觉统一。

如果需要把颜色映射到phones,只需要把aes(colour = video)改成aes(colour = phones),同时调整图例名称即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:28:44