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

使用ggplotly转换factoextra的PCA绘图时图例分组重复如何解决

问题复现

依赖包加载及初始绘图代码如下,直接绘图不会出现图例重复问题:

library(FactoMineR)
library(dplyr)
library(factoextra)
library(plotly)
pca1 <- PCA(iris[,1:4])
# 生成按物种分组的PCA个体散点图
fpi <- fviz_pca_ind(pca1, habillage = iris$Species)
fpi

PCA绘图结果

使用ggplotly()转换上述ggplot对象后,图例中的分组会重复出现两次:

ggplotly(fpi)

ggplotly转换后分组重复的绘图结果

问题原因

fviz_pca_ind()设置分组参数habillage时,会默认同时将color和shape两个美学属性映射到分组变量,ggplotly转换时会为两个映射各自生成独立图例,最终出现重复。

解决方案

方法1:固定散点形状,仅保留颜色映射

生成绘图对象时指定固定的散点形状,不再将形状映射到分组,仅保留颜色分组,转换后仅生成一个图例:

# 指定shape.ind为固定值,不随分组变化
fpi <- fviz_pca_ind(pca1, habillage = iris$Species, shape.ind = 19)
ggplotly(fpi)

方法2:合并ggplot层面的图例

如果需要保留不同分组的不同散点形状,可在ggplot层面统一颜色和形状的图例名称,转换时会自动合并为单个图例:

fpi <- fviz_pca_ind(pca1, habillage = iris$Species) +
  # 统一两个图例的名称,触发自动合并
  guides(color = guide_legend("物种"), shape = guide_legend("物种"))
ggplotly(fpi)

方法3:转换后手动隐藏重复图例

无需修改原始ggplot对象,转换后直接隐藏其中一组重复的图例项即可:

ggplotly(fpi) %>%
  # 隐藏前3个对应形状映射的图例项(分组数为3时)
  style(showlegend = FALSE, traces = 1:3)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:51:02