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

如何在R中可视化成对样本化学相似性随空间距离的变化?

在R中展示化学相似性随空间距离变化的基础可视化方案

假设你已经有了Bray-Curtis相异矩阵(记为bray_curtis_dist)和空间Euclidean距离矩阵(记为spatial_dist),下面是几种基础的可视化实现方式:

第一步:把距离矩阵转成成对数据

距离矩阵是对称的,我们只需要提取上三角(排除对角线)的元素,得到每对样本的空间距离和对应的化学相似性(注意:Bray-Curtis是相异度,相似性=1-相异度):

# 提取上三角索引(跳过对角线)
upper_tri <- upper.tri(bray_curtis_dist, diag = FALSE)

# 提取成对的空间距离和化学相似性
spatial_pairs <- spatial_dist[upper_tri]
chem_similarity <- 1 - bray_curtis_dist[upper_tri]

# 整理成数据框方便绘图
plot_data <- data.frame(
  spatial_distance = spatial_pairs,
  chemical_similarity = chem_similarity
)

几种可视化方案

1. 散点图+平滑趋势线

最直观的方式,用散点展示每对样本的关系,再用平滑线呈现整体趋势:

用ggplot2实现(推荐,样式更灵活)

library(ggplot2)

ggplot(plot_data, aes(x = spatial_distance, y = chemical_similarity)) +
  geom_point(alpha = 0.5, size = 1.5) +  # 设透明度避免点重叠
  geom_smooth(method = "loess", se = TRUE, color = "darkred") +  # loess平滑线,带置信区间
  labs(
    x = "空间距离 (Euclidean)",
    y = "化学相似性 (1 - Bray-Curtis相异度)",
    title = "化学相似性随空间距离的变化"
  ) +
  theme_minimal()

用基础绘图系统实现(无需额外包)

plot(plot_data$spatial_distance, plot_data$chemical_similarity,
     xlab = "空间距离 (Euclidean)",
     ylab = "化学相似性 (1 - Bray-Curtis相异度)",
     main = "化学相似性随空间距离的变化",
     pch = 16, col = rgb(0,0,0,0.5))  # 半透明黑色点
lines(lowess(plot_data$spatial_distance, plot_data$chemical_similarity), col = "darkred", lwd = 2)

2. 分箱箱线图

如果样本对太多,散点会重叠,把空间距离分成几个区间,看每个区间内相似性的分布:

# 给空间距离分箱(这里分5个区间,可自行调整breaks参数)
plot_data$distance_bin <- cut(plot_data$spatial_distance, breaks = 5)

ggplot(plot_data, aes(x = distance_bin, y = chemical_similarity)) +
  geom_boxplot(fill = "lightblue", alpha = 0.7) +
  labs(
    x = "空间距离区间",
    y = "化学相似性 (1 - Bray-Curtis相异度)",
    title = "不同空间距离区间的化学相似性分布"
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))  # 旋转x轴标签避免重叠

3. 距离衰减折线图(带误差线)

计算每个空间距离区间的平均相似性,用折线展示衰减趋势,误差线表示离散程度:

library(dplyr)

# 按分箱计算均值、标准差和样本量
summary_data <- plot_data %>%
  group_by(distance_bin) %>%
  summarise(
    mean_sim = mean(chemical_similarity),
    sd_sim = sd(chemical_similarity),
    count = n()
  )

# 绘图
ggplot(summary_data, aes(x = distance_bin, y = mean_sim, group = 1)) +
  geom_line(color = "darkblue", lwd = 1.2) +
  geom_point(size = 3) +
  geom_errorbar(aes(ymin = mean_sim - sd_sim, ymax = mean_sim + sd_sim), width = 0.2) +
  labs(
    x = "空间距离区间",
    y = "平均化学相似性",
    title = "化学相似性的距离衰减趋势",
    subtitle = "误差线为标准差"
  ) +
  theme_minimal()

小提示

  • 如果你的距离矩阵是用vegan包的vegdist生成的,直接用上面的代码就行,dist类对象支持索引提取。
  • 分箱数量可以自定义,比如用breaks = seq(min(spatial_pairs), max(spatial_pairs), length.out = 6)生成等距的5个分箱。
  • 平滑线可以换成线性回归(method = "lm"),如果想检验线性关系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:38:26