Plotly绘图标注数组KG值时触发layout.title类型报错如何解决
问题根因
报错触发的直接原因:Mittelspannung()返回的KG是列表类型(从报错信息可见为单元素列表[-0.408]),但Plotly布局接口的title_text属性仅接受字符串、可隐式转换为字符串的数值类型,传入列表时会直接触发类型校验失败。
另外原代码中fig.parallel_coordinates()属于无效调用:你当前创建的是直角坐标系散点图,平行坐标图接口和当前画布不匹配,该行无法实现标注KG的效果,可直接删除。
解决方案
根据KG的展示位置需求,二选一即可:
方案1:KG值展示在图表标题中
从KG列表中取出目标数值,格式化为字符串后传入标题参数即可,修改对应代码段:
# 提取KG列表中的数值,单元素列表直接取索引0即可 kg_value = KG[0] fig.update_layout( height=800, # 可自行调整小数位数、标题文本格式 title_text=f"应力幅值-平均应力关系曲线 (KG = {kg_value:.3f})" ) # 删除无效的平行坐标调用行
方案2:KG值标注在绘图区域内
如果需要在图内空白位置展示KG参数,可通过注释接口添加带边框的标注:
kg_value = KG[0] # x、y为相对画布的位置参数,取值范围0-1,可根据实际图表效果调整 fig.add_annotation( x=0.02, y=0.98, xref="paper", yref="paper", text=f"KG = {kg_value:.3f}", showarrow=False, bordercolor="#333", borderwidth=1, borderpad=5, bgcolor="white" ) fig.update_layout(height=800, title_text="应力幅值-平均应力关系曲线")
修正后完整代码参考
CLE,Z,K,Rmv,SigS,M,N,SigD,SigG,M2,SigM,σ_amp_BauteilTAES,σ_amp_BauteilPES,KG,SigA1,SigN2M,kN2E6,SigA,slope,σamp10,σmean10,σamp100,σmean100,σamp1000,σmean1000,σamp10000,σmean10000,σamp100000,σmean100000 = Mittelspannung() df['SigA1'] = SigA1 df['SigM'] = SigM df['SigN2M'] = SigN2M df['kN2E6'] = kN2E6 df['SigA'] = SigA df['slope'] = slope print(df) fig = make_subplots(specs=[[{"secondary_y": True}]]) fig.update_xaxes(title_text="Mean Stress [MPa]") fig.update_yaxes(title_text="Stress Amplitude [MPa]") fig.add_trace(go.Scatter(x=SigM, y=SigN2M, name="N = 2M")) fig.add_trace(go.Scatter(x=SigM[1:29], y=SigA1[1:29], name="N = 1")) kg_val = KG[0] fig.update_layout( height=800, title_text=f"应力关系曲线 (KG = {kg_val:.3f})" ) fig.show()
提示:如果后续
Mittelspannung()返回的KG列表包含多个元素,可遍历取值后拼接为完整字符串再传入,只要最终传入文本类参数的是字符串类型,就不会触发该类类型报错。
内容的提问来源于stack exchange,提问作者Pavan Sai Jagarlamudi
相关产品推荐
相关产品推荐

