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

如何在R的Plotly中为3D散点图设置自定义离散颜色尺度

在R的Plotly中为3D散点图设置自定义颜色的正确方法

你遇到的错误是因为scatter3d类型不支持colorscale参数——这个参数是给连续数值变量做颜色映射用的,而你的Varieta是分类变量,应该用colors参数来指定自定义的分类颜色映射。另外原代码里还有个大小写问题:你定义的数据框是df,但add_trace里写的是DF,R对大小写敏感,得统一成df。

修正后的完整代码

# 定义数据框
Varieta <- c("Habanero rosso", "Habanero rosso", "Habanero rosso", "Naga Morich", "Naga Morich",    "Naga Morich", "Fatalii Yellow",  "Moruga Yellow", "Erotico Arancio")
a_color <- c(8.350, 40.532, 38.904, 44.942, 43.132, 42.994, 38.021, 37, 36)
b_color <- c(8, 40, 38, 44, 43, 42, 38, 37, 36)
L_color <- c(4.350, 1.532, 3.904, 4.942, 3.132, 2.994, 3.021, 3.56, 36.54)
df <- data.frame(Varieta, a_color, b_color, L_color)

# 自定义颜色映射(已用setNames绑定类别)
pal <- c('rgb(255, 0, 0)', 
         'rgb(75, 0, 0)', 
         'rgb(150, 200, 0)', 
         'rgb(255, 255, 0)', 
         'rgb(220, 100, 0)')
pal <- setNames(pal, c("Habanero rosso",  
                       "Naga Morich",     
                       "Fatalii Yellow",  
                       "Moruga Yellow",   
                       "Erotico Arancio"))

# 绘制3D散点图
fig <- plot_ly(type = 'scatter3d', mode = 'markers') 

fig <- fig %>% add_trace(data = df, # 修正数据框名称
                         x = ~a_color,
                         y = ~b_color,
                         z = ~L_color,
                         color = ~Varieta,
                         colors = pal, # 替换colorscale为colors
                         marker = list(size = 5,
                                       line = list(color = 'rgb(100, 100, 100)',
                                                   width = 2)))

fig <- fig %>% layout(scene = list(xaxis = list(title = "a",
                                                gridcolor = "rgb(0, 0, 0)"),
                                   yaxis = list(title = "b",
                                                gridcolor = "rgb(0, 0, 0)"),
                                   zaxis = list(title = "L",
                                                gridcolor = "rgb(0, 0, 0)")))

关键修改点说明

  • 把colorscale = pal替换成colors = pal:colors参数专门用于分类变量的颜色映射,你的pal已经通过setNames把颜色值和Varieta的每个类别一一对应,Plotly会自动匹配对应颜色。
  • 修正数据框名称:将DF改为df,避免因大小写不匹配导致的数据读取错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 18:32:56