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