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

使用Plotly创建单一颜色堆叠条形图及现有堆叠条形图代码故障排查求助

解决Plotly堆叠条形图问题(含单一颜色版本)

首先,你的代码无法正常运行的核心问题是没有指定图表类型为条形图(type = "bar"),Plotly默认不会自动识别为条形图,导致堆叠逻辑不生效。另外,hovertext的写法可以优化,确保和每行数据正确绑定。

修复后的基础堆叠条形图(双色)

下面是修正后的代码,解决了原代码的运行问题,同时保证hover信息正确对应每个化学物质:

library(plotly)

# 确保数据格式为data.frame
dp <- as.data.frame(dp)

fig <- plot_ly(
  data = dp,
  x = ~`Element Name`,
  y = ~`Amount Available`,
  type = "bar",  # 必须指定为bar类型才能启用堆叠
  name = "Amount Available",
  hovertext = ~paste(
    "Chemical Name:", `Element Name`,
    "<br>Available Amount:", `Amount Available`
  ),
  hoverinfo = "text"
) %>%
  add_trace(
    y = ~DemandCourse,
    name = 'Demand',
    hovertext = ~paste(
      "Chemical Name:", `Element Name`,
      "<br>Demand Amount:", DemandCourse
    ),
    hoverinfo = "text"
  ) %>%
  layout(
    showlegend = TRUE,
    barmode = "stack",
    xaxis = list(title = "Chemical Elements", tickangle = -45),  # 旋转x轴标签避免名称重叠
    yaxis = list(title = "Quantity")
  )

fig

单一颜色的堆叠条形图

如果需要两个堆叠部分使用同一种颜色,只需要给两个trace设置相同的marker.color参数,同时可以调整legend(比如合并条目或隐藏):

fig_single_color <- plot_ly(
  data = dp,
  x = ~`Element Name`,
  y = ~`Amount Available`,
  type = "bar",
  name = "Total Quantity",  # 统一名称,让legend只显示一个条目
  marker = list(color = "#2196F3"),  # 指定单一颜色(可替换为任意十六进制/命名颜色)
  hovertext = ~paste(
    "Chemical Name:", `Element Name`,
    "<br>Available Amount:", `Amount Available`
  ),
  hoverinfo = "text"
) %>%
  add_trace(
    y = ~DemandCourse,
    name = "Total Quantity",  # 和上一个trace同名,合并legend
    marker = list(color = "#2196F3"),  # 保持相同颜色
    hovertext = ~paste(
      "Chemical Name:", `Element Name`,
      "<br>Demand Amount:", DemandCourse
    ),
    hoverinfo = "text"
  ) %>%
  layout(
    showlegend = TRUE,
    barmode = "stack",
    xaxis = list(title = "Chemical Elements", tickangle = -45),
    yaxis = list(title = "Quantity"),
    legend = list(title = list(text = "<b>Quantity Details</b>"))  # 可选:自定义legend标题
  )

fig_single_color

额外提示:

  • 如果完全不需要区分堆叠部分的legend,可以设置showlegend = FALSE。
  • 颜色值可以替换为你喜欢的任意十六进制码、RGB值或命名颜色(比如"darkgreen")。
  • 旋转x轴标签是为了避免化学名称过长导致重叠,提升图表可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 15:18:12