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

如何在R的Plotly PCA可视化中用观测编号(行号)替换标记?

解决方案:将Plotly PCA散点图标记替换为观测编号

要把PCA散点图里的圆点标记换成观测行号文本,只需调整plot_ly的核心参数并指定文本内容即可,具体修改如下:

修改后的完整代码

library(plotly)
library(stats)
data(iris)
X <- subset(iris, select = -c(Species))
prin_comp <- prcomp(X, rank. = 2)
components <- prin_comp[["x"]]
components <- data.frame(components)
components <- cbind(components, iris$Species)
components$PC2 <- -components$PC2
# 新增观测编号列(也可直接用rownames(components),显式创建更直观)
components$obs_id <- 1:nrow(components)

fig <- plot_ly(components, 
               x = ~PC1, 
               y = ~PC2, 
               color = ~iris$Species, 
               colors = c('#636EFA','#EF553B','#00CC96'), 
               type = 'scatter', 
               mode = 'text',  # 将标记模式从markers改为text
               text = ~obs_id, # 指定显示的文本为观测编号
               textposition = 'top center') %>% # 可选:设置文本显示位置,减少重叠
  layout(
    legend=list(title=list(text='Species')), # 修正图例标题为实际分类含义
    plot_bgcolor='#e5ecf6',
    xaxis = list(
      title = "PC1", # 修正x轴标题为对应主成分
      zerolinecolor = "#ffff",
      zerolinewidth = 2,
      gridcolor='#ffff'),
    yaxis = list(
      title = "PC2", # 修正y轴标题为对应主成分
      zerolinecolor = "#ffff",
      zerolinewidth = 2,
      gridcolor='#ffff'))
fig

关键改动说明

  1. 添加观测编号:显式创建obs_id列,值对应数据集的行号1到150,也可直接用rownames(components)调用默认行名。
  2. 切换文本模式:将mode = 'markers'改为mode = 'text',让Plotly渲染文本而非圆点标记。
  3. 绑定文本内容:通过text = ~obs_id指定要显示的观测编号。
  4. 优化显示效果:
    • 用textposition参数设置文本显示位置(如'top center'),避免文本与坐标点重叠;
    • 修正了原代码中模糊的图例标题和坐标轴标题,让图表含义更清晰。

如果出现文本重叠问题,可通过textfont = list(size = 8)缩小字体,或设置textposition = 'auto'让Plotly自动选择最优显示位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 01:55:16