如何将DataFrame元数据行作为Plotly柱状图的悬停数据
解决方案
完全可以实现,核心是先分离样本数据和元数据,再将元数据映射到对应的变量,添加到悬停信息中。具体步骤如下:
1. 分离样本数据与元数据
首先从原DataFrame中提取用于绘图的样本行(前22行)和元数据行(最后6行),并将元数据转置为以变量名为索引的格式,方便后续调用:
# 分离样本数据(前22行)和元数据(最后6行) sample_data = df_plot.iloc[:-6].copy() # 转置元数据,让变量名作为行索引,元数据项作为列 metadata = df_plot.iloc[-6:].set_index('Strain').T
2. 绘制柱状图并添加元数据到悬停信息
使用px.bar绘制图表后,遍历每个变量对应的trace,自定义悬停模板(hovertemplate),将对应变量的元数据整合进去:
# 创建水平柱状图 fig = px.bar(sample_data, y="Strain", x=sample_data.columns[1:], orientation="h", template="simple_white", width=800, height=1000, color_discrete_sequence=px.colors.qualitative.Light24) # 遍历每个变量对应的trace,添加元数据到悬停文本 for idx, var_name in enumerate(sample_data.columns[1:]): # 获取当前变量的所有元数据 var_metadata = metadata.loc[var_name].to_dict() # 构建悬停文本模板 hover_template = f"样本: %{{y}}<br>变量: {var_name}<br>数值: %{{x}}" # 逐个添加元数据项 for meta_key, meta_value in var_metadata.items(): hover_template += f"<br>{meta_key}: {meta_value}" # 更新当前trace的悬停模板 fig.data[idx].hovertemplate = hover_template fig.show()
关键说明
- 必须移除元数据行再绘图,否则元数据会被当作样本显示在y轴上,不符合需求。
- 转置元数据后,每个变量对应一行数据,能快速提取该变量的所有元信息。
- 通过自定义
hovertemplate,可以精准控制悬停时显示的内容,将样本、变量、数值和元数据整合在一起。
内容的提问来源于stack exchange,提问作者Luis Manuel Quiros guerrero
相关产品推荐
相关产品推荐

