将 RGB 颜色数组转换为 px.imshow 热图

Converting an array of RGB colours to a px.imshow heatmap

我目前有一个具有这种格式的不同 RGB 颜色值的 DF:

          Protein_ID1  Protein_ID2  Protein_ID3
Module1    [R, G, B]    [R, G, B]    [R, G, B]    
Module2    [R, G, B]    [R, G, B]    [R, G, B]    
Module3    [R, G, B]    [R, G, B]    [R, G, B] 

我想用 px.imshow 显示这个作为吃图,单元格颜色对应于 RGB 值。

当我这样做时:

fig = px.imshow(df)
fig.update_layout(
                  xaxis=dict(
                             rangeslider=dict(visible=True)
                            )
                 )
fig.write_html(results_file)

我在空白结果文件中什么也没有得到。基于第一个示例 here,我将我的 df 转换为如下数组,但仍然没有运气:

array = df.to_numpy()
fig = px.imshow(array, x = df.columns, y = df.index)
fig.update_layout(
                  xaxis=dict(
                             rangeslider=dict(visible=True)
                            )
                 )
fig.write_html(results_file)

任何人都可以阐明处理此问题的正确方法吗?

谢谢! 蒂姆

  • 核心是获取 px.imshow() 正确的输入。它需要是 uint8
  • 类型的 3D numpy 数组
  • 因此从数据框中获取值并重组为输入要求
import pandas as pd
import numpy as np
import plotly.express as px

# simulate data frame
df = pd.DataFrame(
    np.random.randint(0, 255, [10, 10, 3]).tolist(),
    columns=[f"Protein_ID{i}" for i in range(10)],
    index=[f"Module{i}" for i in range(10)],
)

px.imshow(np.array(df.values.tolist(), dtype=np.uint8)).show()

print(df.iloc[0:3, 0:3].to_markdown())

示例数据

Protein_ID0 Protein_ID1 Protein_ID2
Module0 [232, 78, 62] [96, 105, 104] [138, 63, 46]
Module1 [143, 49, 25] [190, 70, 138] [77, 170, 155]
Module2 [16, 209, 3] [153, 215, 47] [216, 246, 121]

图片

有标签


px.imshow(np.array(df.values.tolist(), dtype=np.uint8)).update_layout(
    xaxis={"tickformat": "array", "tickvals": list(range(10)), "ticktext": df.columns},
    yaxis={"tickformat": "array", "tickvals": list(range(10)), "ticktext": df.index}

)