1

我有一些我不理解的行为。

代码:

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 标签集中在最右边:

![缩小

我无法为我的生活找出原因。

非常感谢任何帮助!

4

1 回答 1

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 是您实际想要显示的 xvalue。

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()

在此处输入图像描述

于 2021-10-02T23:39:55.950 回答