如何在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
相关产品推荐
相关产品推荐

