使用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
相关产品推荐
相关产品推荐

