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

Posted

技术标签:

【中文标题】将 RGB 颜色数组转换为 px.imshow 热图【英文标题】:Converting an array of RGB colours to a px.imshow heatmap 【发布时间】:2022-01-18 14:03:16 【问题描述】:

我目前有这种格式的不同 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)

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

谢谢! 蒂姆

【问题讨论】:

【参考方案1】: 核心输入到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_IDi" for i in range(10)],
    index=[f"Modulei" 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

)

【讨论】:

嗨,Rob,这非常有效。我会接受,因为它回答了提出的问题,但我意识到这个问题并不完整。是否可以设置非数字 x/y 轴,理想情况下 x/y 值出现在悬停文本中?我尝试做的事情的早期迭代,使用数据框,自动做到了(但由于其他原因失败) 更新了如何添加标签

以上是关于将 RGB 颜色数组转换为 px.imshow 热图的主要内容,如果未能解决你的问题,请参考以下文章

将数组十六进制颜色转换为数组 rgb 颜色 [重复]

如何在 PyTorch 中将 RGB 图像编码为 n_class One 热张量

将 RGB 颜色转换为 XY

将 RGBA 颜色转换为 RGB

将 RGB 颜色值转换为十进制

如何将“背景颜色”转换为 rgb() 格式?