基因时间线性回归绘图遇TypeError错误求助
解决线性回归预测散点图绘制的TypeError问题
错误原因分析
你遇到的TypeError: string indices must be integers是因为**df5.iterrows()返回的是(行索引, 行数据)元组**,代码里的i是行的索引值(从你的df5结构看是字符串类型的时间点,比如'0'、'12'),而不是行数据对象。你试图用i["prediction"]去取值,相当于用字符串索引字符串,自然会报错。
此外原代码还有其他逻辑问题:
- 双重循环
iterrows()+列循环完全冗余,会重复绘制大量无效图表 px.scatter传入df5[col]会丢失split、prediction等关键列,导致color='split'失效- 代码中
y.min()、y.max()的y变量未定义,会触发新的NameError
修正后的代码
假设你的df5结构是:行索引为时间点,列包含各个基因的表达值、prediction(预测值列)、split(训练/测试集标记列),要为每个基因绘制真实表达值vs预测值的散点图(带边际直方图和参考线),代码如下:
import plotly.express as px # 遍历每个基因列(排除prediction和split列) for gene_col in [col for col in df5.columns if col not in ['prediction', 'split']]: # 使用完整的df5作为数据源,确保能访问split和prediction列 fig = px.scatter( df5, x=gene_col, # X轴:基因的真实表达值 y='prediction', # Y轴:模型预测值 marginal_x='histogram', marginal_y='histogram', color='split', # 按训练/测试集标记上色 trendline='ols', title=f'基因 {gene_col} 的真实值vs预测值' # 添加图表标题区分不同基因 ) # 设置直方图为概率分布 fig.update_traces(histnorm='probability', selector={'type':'histogram'}) # 添加y=x参考线(真实值=预测值的理想线) x_min, x_max = df5[gene_col].min(), df5[gene_col].max() fig.add_shape( type="line", line=dict(dash='dash'), x0=x_min, y0=x_min, x1=x_max, y1=x_max ) fig.show()
关键说明
- 循环逻辑优化:直接遍历基因列,跳过
prediction和split这类非基因列,避免无效循环 - 数据源正确传递:用完整的
df5作为px.scatter的输入,确保所有需要的列(split、prediction)都能被访问 - 参考线修复:用基因列的极值定义参考线的起止点,避免未定义变量的错误
- 索引问题解决:彻底避开了
iterrows()的误用,直接通过列名访问数据,更高效且不易出错
内容的提问来源于stack exchange,提问作者melolilili
相关产品推荐
相关产品推荐

