Python Plotly.figure_factory热力图annotation_text坐标错位问题
问题修复方案
根本原因
plotly的ff.create_annotated_heatmap会自动推断坐标轴类型,你的x轴参数同时包含非数字字符串和纯数字字符串,函数错误将x轴判定为线性数值轴:纯数字的x标签会被解析为对应数值作为实际坐标,这些数值远大于分类的默认索引值,导致对应注释全部偏移挤到画布右侧,仅首尾非纯数字的分类注释位置正常。
修复方法
在原有更新坐标轴的代码中,显式指定x轴类型为category即可,修改后的完整代码如下:
import numpy as np import plotly.express as px # 原有代码遗漏该导入,调用px.colors需先导入 import plotly.figure_factory as ff z=np.array([[30.0, 15.0, 14.72899729, 7.72994652, 19.61096606, 15.49867374, 19.85271318, 30.0], [30.0, 15.0, 22.36842105, 4.80104712, 20.99742268, 21.51211073, 23.5408971, 0.0], [30.0, 15.0, 7.5, 0.0, 0.0, 0.0, 10.63095238, 30.0]]) y = ['Ref:14973', 'Ref:17746', 'Ref:21846'] x = ['MN908947.3', '2361', '2371', '2373', '2374', '2375', '2376', 'Warnings'] z_text = np.array([['G','A', 'A', 'N', 'A', 'A', 'A', ','], ['C', 'C', 'T', 'N', 'T', 'T', 'C', ',hp'], ['C', 'N', 'N', 'N', 'N', 'N', 'T', ',']]) fig = ff.create_annotated_heatmap( z, x=x,y=y, annotation_text=z_text, colorscale=px.colors.diverging.RdYlGn, font_colors=['black'], showscale=True, customdata= dft44, # 请确保dft44的shape和z完全一致 hovertemplate= "Sample: %{x} <br>Position: %{y} <br>Score: %{z} <br>BAM: %{customdata}") fig.update_yaxes( title_text = "Pos", title_standoff = 25) # 新增这一行指定x轴为分类轴即可解决注释错位问题 fig.update_xaxes(type='category') fig.show()
补充说明
如果修改后仍存在轻微的注释偏移,可以额外添加以下代码,强制注释适配单元格大小:
fig.update_annotations(constraintext="tight")
内容的提问来源于stack exchange,提问作者Liam McIntyre
相关产品推荐
相关产品推荐

