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

如何在R的Plotly 3D散点图中实现部分类别点透明显示?

解决方案

不用拆分多个轨迹,有两种简便方法实现需求:

方法一:给目标类别颜色添加透明度通道

Plotly支持带透明度的十六进制颜色(格式为#RRGGBBAA,最后两位是透明度,00全透明,FF完全不透明)。我们可以先把自定义颜色和品牌一一对应,再给指定品牌的颜色加上透明度:

mtcars$brand <- sapply(strsplit(rownames(mtcars), " "), "[[", 1)
mtcars$brand <- as.factor(mtcars$brand)

# 创建品牌-颜色的命名向量,确保颜色和品牌对应准确
brand_colors <- setNames(
  c("#ebac23", "#b80058", "#008cf9", "#006e00", "#00bbad",
    "#d163e6", "#b24502", "#ff9287", "#5954d6", "#00c6f8",
    "#878500", "#00a76c", "#bdbdbd", "#846b54", "#5F2F87",
    "#241346", "#B3EE3A", "#077187", "#FFE06A", "#73787E",
    "#A6CEE3", "#1F78B4"),
  levels(mtcars$brand)
)

# 给Cadillac和Ferrari的颜色添加透明度(这里用40表示半透明,可调整)
brand_colors[c("Cadillac", "Ferrari")] <- paste0(brand_colors[c("Cadillac", "Ferrari")], "40")

fig <- plot_ly(mtcars, x = ~wt, y = ~hp, z = ~qsec, 
               color = ~brand, colors = brand_colors,
               type = "scatter3d", mode = "markers")
fig

方法二:单独设置透明度列

新增一列控制每个点的透明度,再映射到Plotly的opacity参数:

mtcars$brand <- sapply(strsplit(rownames(mtcars), " "), "[[", 1)
mtcars$brand <- as.factor(mtcars$brand)

custom_colors <- c("#ebac23", "#b80058", "#008cf9", "#006e00", "#00bbad",
                   "#d163e6", "#b24502", "#ff9287", "#5954d6", "#00c6f8",
                   "#878500", "#00a76c", "#bdbdbd", "#846b54", "#5F2F87",
                   "#241346", "#B3EE3A", "#077187", "#FFE06A", "#73787E",
                   "#A6CEE3", "#1F78B4")

# 新增opacity列:Cadillac和Ferrari设为0.2(透明),其余为1(不透明)
mtcars$opacity <- ifelse(mtcars$brand %in% c("Cadillac", "Ferrari"), 0.2, 1)

fig <- plot_ly(mtcars, x = ~wt, y = ~hp, z = ~qsec, 
               color = ~brand, colors = custom_colors,
               opacity = ~opacity,  # 映射透明度列
               type = "scatter3d", mode = "markers")
fig

说明

  • 方法一的好处是颜色和透明度绑定在一起,图例里的颜色也会显示对应透明度;
  • 方法二更灵活,能单独调整透明度数值,不影响颜色本身。

两种方法都只需要一次绘制,不用逐个添加轨迹,完美解决你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 08:15:35