Plotly循环生成热力图后如何将所有图表整合到单个子图展示?
关于Plotly批量展示带标注热力图到子图的解答
你描述的实现方案完全可行,这也是Plotly生态下批量对比同类型参数化图表的常用方案。具体实现步骤如下:
实现步骤
- 第一步:循环生成热力图存入列表
你可以直接初始化空列表figure_list = [],在嵌套循环中调用ff.create_annotated_heatmap生成单张热力图后,执行figure_list.append(fig)存入列表即可,无需额外修改原有生成单图的逻辑。 - 第二步:创建子图画布
导入plotly.subplots中的make_subplots方法,根据你生成的热力图总数量,提前规划子图的行数、列数,示例代码如下:from plotly.subplots import make_subplots import plotly.figure_factory as ff # 示例:总共生成12张热力图,规划为3行4列的子图布局 total_figs = len(figure_list) rows = 3 cols = 4 # 可按需设置子图标题、间距等参数 fig_subplot = make_subplots(rows=rows, cols=cols, subplot_titles=[f"参数组{i+1}" for i in range(total_figs)]) - 第三步:批量将热力图添加到子图对应位置
这里需要注意:ff.create_annotated_heatmap生成的内容包含两部分,一是热力图本身的trace轨迹,二是自带的数值标注(属于figure级别的annotations配置),需要分别做适配处理避免标注错位:for idx, fig in enumerate(figure_list): # 计算当前图对应的子图行、列位置 current_row = idx // cols + 1 current_col = idx % cols + 1 # 添加热力图轨迹 fig_subplot.add_trace(fig.data[0], row=current_row, col=current_col) # 适配标注的坐标轴引用 for annot in fig.layout.annotations: annot.update(xref=f"x{current_col}", yref=f"y{current_row}") fig_subplot.add_annotation(annot) # 调整布局后展示 fig_subplot.update_layout(height=800, width=1600, title_text="多参数热力图对比") fig_subplot.show()
注意事项
- 如果所有热力图的x轴、y轴取值一致,可以在
make_subplots中设置shared_xaxes=True、shared_yaxes=True,减少冗余标签,提升对比效率 - 热力图数量较多时,可以适当调整
make_subplots的horizontal_spacing、vertical_spacing参数,避免子图间拥挤 - 可以统一给所有子图设置相同的色阶范围,避免不同热力图色阶不一致导致的对比误差
内容的提问来源于stack exchange,提问作者Jibril
相关产品推荐
相关产品推荐

