为啥我在 python plotly.figure_factory 中的 annotation_text 在某些单元格中得到了错误的坐标?
Posted
技术标签:
【中文标题】为啥我在 python plotly.figure_factory 中的 annotation_text 在某些单元格中得到了错误的坐标?【英文标题】:Why is my annotation_text in python plotly.figure_factory getting the wrong coordinates in some cells?为什么我在 python plotly.figure_factory 中的 annotation_text 在某些单元格中得到了错误的坐标? 【发布时间】:2021-11-23 23:15:56 【问题描述】:我遇到了一些我不理解的行为。
代码:
import numpy as np
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,
hovertemplate= "Sample: %x <br>Position: %y <br>Score: %z <br>BAM: %customdata")
fig.update_yaxes(
title_text = "Pos",
title_standoff = 25)
fig.show()
如果您放大很多,您会发现它几乎可以工作了,来自 z_text 的文本位于第一列和最后一列(MN908947.3 和警告)的正确位置,但不是中间列(2361 到 2376)
如果您重置轴,您会看到最右边的缺失 z_text 标签:
我一辈子都想不通为什么。
非常感谢任何帮助!
【问题讨论】:
【参考方案1】:这绝对是 plotly.figure_factory
的一个错误,其中图表渲染器可能在 x = ['MN908947.3', '2361', '2371', '2373', '2374', '2375', '2376', 'Warnings']
上遇到了一些问题,因为一旦 x 数组从 'MN908947.3' to '2361'
更改,注释就会停止正确放置,这意味着字符串和字符串之间存在一些混淆数字。
我最初的解决方法是在数字前放置一些非数字符号,例如等号 ('='
),以便将它们解释为字符串,但更好的解决方法是将参数 x=[1,2,3,4,5,6,7]
传递给ff.create_annotated_heatmap
然后更新 xaxes,以便这些 xticks 处的 ticktext 是您实际想要显示的 xvalues。
import numpy as np
import plotly.express as px
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=list(range(len(x))),y=y,
annotation_text=z_text,
colorscale=px.colors.diverging.RdYlGn,
font_colors=['black'],
# showscale=True,
# customdata= dft44,
hovertemplate= "Sample: %x <br>Position: %y <br>Score: %z <br>BAM: %customdata")
fig.update_yaxes(
title_text = "Pos",
title_standoff = 25,
)
fig.update_xaxes(tickvals=list(range(len(x))), ticktext=x)
fig.show()
【讨论】:
以上是关于为啥我在 python plotly.figure_factory 中的 annotation_text 在某些单元格中得到了错误的坐标?的主要内容,如果未能解决你的问题,请参考以下文章