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

ggplot2绘制PCA图出现坐标轴翻转,如何调整使两张图完全一致

ggplot2绘制PCA图坐标轴方向反转的解决方法

PCA计算过程中特征向量符号随机翻转是正常数值计算现象,和脚本本身无关,可通过以下三种方案解决:

方案1:直接在绘图时调整坐标轴方向

以其中一张图为基准,另一张图对反转的坐标轴添加scale_*_reverse()函数,同时固定坐标轴范围避免缩放差异:

# 基准图轴设置示例(根据你的实际PCA结果调整范围值)
scale_x_continuous(limits = c(-5, 5), breaks = seq(-5,5,2)) +
scale_y_continuous(limits = c(-4, 4), breaks = seq(-4,4,2))

# 若PC1方向反转,替换x轴设置为
scale_x_reverse(limits = c(5, -5), breaks = seq(-5,5,2)) +
scale_y_continuous(limits = c(-4, 4), breaks = seq(-4,4,2))

# 若PC2方向反转,替换y轴设置为
scale_x_continuous(limits = c(-5, 5), breaks = seq(-5,5,2)) +
scale_y_reverse(limits = c(4, -4), breaks = seq(-4,4,2))

方案2:合并数据统一做PCA(根源避免问题)

不要分两次独立运行PCA计算,将两组数据合并后执行一次PCA,再拆分绘图,可保证坐标轴完全一致:

library(ggplot2)
library(dplyr)

# 给两组数据添加分组标签
df1$group <- "数据集1"
df2$group <- "数据集2"

# 合并两组数据,仅保留用于PCA计算的数值列+分组列
all_data <- bind_rows(df1, df2)
# 对全部样本统一执行PCA
pca_res <- prcomp(all_data[, c("此处替换为你用于PCA的数值列名")], scale. = TRUE)
# 提取PC1、PC2坐标并关联分组信息
pca_coord <- as.data.frame(pca_res$x[,1:2]) %>%
  mutate(group = all_data$group)

# 绘制第一组PCA图
ggplot(filter(pca_coord, group == "数据集1"), aes(x=PC1, y=PC2)) +
  geom_point() +
  # 固定轴范围为全部样本的PC最值,保证两张图范围完全一致
  scale_x_continuous(limits = c(min(pca_coord$PC1), max(pca_coord$PC1))) +
  scale_y_continuous(limits = c(min(pca_coord$PC2), max(pca_coord$PC2)))

# 绘制第二组PCA图
ggplot(filter(pca_coord, group == "数据集2"), aes(x=PC1, y=PC2)) +
  geom_point() +
  scale_x_continuous(limits = c(min(pca_coord$PC1), max(pca_coord$PC1))) +
  scale_y_continuous(limits = c(min(pca_coord$PC2), max(pca_coord$PC2)))

方案3:数据层面对齐PCA坐标符号

如果必须分开运行PCA,可通过相关系数判断符号是否翻转,直接对PCA结果乘以-1对齐:

# 假设pca1为基准组的prcomp计算结果,pca2为待对齐组的计算结果
# 对齐PC1
if (cor(pca1$x[,1], pca2$x[,1]) < 0) {
  pca2$x[,1] <- pca2$x[,1] * -1
}
# 对齐PC2
if (cor(pca1$x[,2], pca2$x[,2]) < 0) {
  pca2$x[,2] <- pca2$x[,2] * -1
}

额外注意事项

  • 所有绘图的坐标轴范围、刻度参数必须完全一致,不要使用ggplot的默认自动计算逻辑
  • 如果需要标注解释度,可统一提取基准组的PCA解释度标注在两张图上,保持图例、字体、配色参数完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:18:04