为什么我的 annotation_text in python plotly.figure_factory 在某些单元格中得到错误的坐标?
Why is my annotation_text in python plotly.figure_factory getting the wrong coordinates in some cells?
我遇到了一些我不理解的行为。
代码:
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 标签集中在最右边:
我这辈子都想不通为什么。
非常感谢任何帮助!!
这绝对是 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()
我遇到了一些我不理解的行为。
代码:
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 标签集中在最右边:
我这辈子都想不通为什么。
非常感谢任何帮助!!
这绝对是 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()