如何针对单个X值堆叠对应完整Y数组的数值?
解决Plotly堆叠柱状图单个X轴值堆叠对应完整Y数组的问题
原代码的问题在于每个go.Bar的x传入了完整的X轴列表,导致不同系列的Bar会在所有X位置上匹配对应索引的Y值(长度不足时补NaN),最终堆叠的是跨系列同索引的元素。要实现单个X值堆叠其对应的完整Y数组,需要让该X值对应的所有Y元素都定位到同一个X坐标上。
修改后的代码如下:
import plotly.graph_objects as go forx = [1,2,3,4,5] fory = [[4,6,8], [2,9], [5], [3,1,5,2], [6,8]] data = [] # 遍历每个X值及其对应的Y数组 for x_val, y_list in zip(forx, fory): # 为当前X值的每个Y元素创建独立的Bar,全部定位到同一个X坐标 for layer_idx, y_val in enumerate(y_list): data.append(go.Bar( name=f"{x_val} 堆叠层 {layer_idx+1}", x=[x_val], y=[y_val] )) fig = go.Figure(data=data) fig.update_layout(barmode='stack') fig.show()
关键说明:
- 使用
zip(forx, fory)确保每个X值精准对应自身的Y数组 - 每个Y元素单独生成一个
go.Bar,x参数固定为当前X值的单元素列表,让所有同X的Bar都落在同一位置 - 通过
barmode='stack'启用堆叠模式,同一X坐标下的多个Bar会自动垂直堆叠 - 自定义Bar名称,方便在图例中区分不同的堆叠层级
内容的提问来源于stack exchange,提问作者Majoris
相关产品推荐
相关产品推荐

