使用Plotly创建3D曲面图时遇IndexError错误求助
解决Plotly曲面图的IndexError问题
错误原因
你遇到的IndexError: index 0 is out of bounds for axis 0 with size 0,是因为部分日期(Report Date)和变更类型(Change Type)的组合在数据中不存在,导致筛选后的结果为空数组,此时直接访问.values[0]就会触发索引越界错误。
修复方案
方案1:循环中处理空值
在获取计数时先判断筛选结果是否为空,为空则填充0(或NaN),避免直接取索引0:
import plotly.graph_objects as go # 获取类别标签并排序 states = DF['Change Type'].unique() states.sort() weeks = DF['Report Date'].unique() weeks.sort() z_data = [] # 遍历日期和变更类型,处理空值 for week in weeks: row = [] for state in states: filtered = DF[(DF['Change Type'] == state) & (DF['Report Date'] == week)]['Count of Changes'] # 有数据则取第一个值,无数据则填充0 val = filtered.values[0] if len(filtered) > 0 else 0 row.append(val) z_data.append(row) # 匹配你的轴需求:X=Report Date,Y=Change Type,Z=计数 trace = go.Surface(x=weeks, y=states, z=z_data) fig = go.Figure(data=[trace]) # 设置轴标签 fig.update_layout( scene=dict( xaxis_title='Report Date', yaxis_title='Change Type', zaxis_title='Count of Changes' ) ) fig.show()
方案2:用透视表自动生成数据(更简洁高效)
借助pandas的pivot_table直接生成二维表格,自动处理缺失组合并填充0,省去手动循环的麻烦:
import plotly.graph_objects as go # 生成透视表,自动填充缺失值为0 pivot_df = DF.pivot_table( index='Report Date', columns='Change Type', values='Count of Changes', fill_value=0 ) # 提取轴数据和z值矩阵 weeks = pivot_df.index.values states = pivot_df.columns.values z_data = pivot_df.values # 创建曲面图 trace = go.Surface(x=weeks, y=states, z=z_data) fig = go.Figure(data=[trace]) fig.update_layout( scene=dict( xaxis_title='Report Date', yaxis_title='Change Type', zaxis_title='Count of Changes' ) ) fig.show()
额外说明
你原代码的轴对应逻辑和需求不符:曲面图的X/Y轴需要是离散类别(日期、变更类型),Z轴为数值型的计数,所以上述代码调整为X=Report Date、Y=Change Type、Z=Count of Changes,符合曲面图的网格数据逻辑。
内容的提问来源于stack exchange,提问作者PythonBeginner
相关产品推荐
相关产品推荐

