Plotly python 多面热图

Plotly python facetted heatmaps

我正在使用 中的示例将 seaborn 用于 python 中的多面热图。结果如下所示:

我想用 plotly express 做同样的事情,并尝试使用这个起始代码:

import plotly.express as px
df = px.data.medals_wide(indexed=True)
fig = px.imshow(df)
fig.show()

我的数据也在 pd.DataFrame 中,重要的是我要显示热图分组依据的组以及地图的 x/y-axis。

如何扩展 px.imshow 示例以像上面的 seaborn 示例一样按组创建多面热图?

示例数据取自回答问题的参考回复。 express,as data,如果是列数据可以分图,但是结果不能像样本数据那样,用一个分类变量作为抽取条件,用不同的分类变量。如果它是一个子图,您可以使用图形对象绘制它。可以通过在按类别变量提取数据的结果的数据框中指定xy-axis来创建热图。

import numpy as np
import pandas as pd
import plotly.express

# Generate a set of sample data
np.random.seed(0)
indices = pd.MultiIndex.from_product((range(5), range(5), range(5)), names=('label0', 'label1', 'label2'))
data = pd.DataFrame(np.random.uniform(0, 100, size=len(indices)), index=indices, columns=('value',)).reset_index()

import plotly.graph_objects as go
from plotly.subplots import make_subplots

titles = ['label0='+ str(x) for x in range(5)]
fig = make_subplots(rows=1, cols=len(data['label0'].unique()),
                    shared_yaxes=True,
                    subplot_titles = tuple(titles))

for i in data['label0'].unique():
    df = data[data['label0'] == i]
    fig.add_trace(go.Heatmap(z=df.value, x=df.label1, y=df.label2), row=1, col=i+1)
    fig.update_traces(showscale=False)
    fig.update_xaxes(dtick=[0,1,2,3,4])
    fig.update_xaxes(title_text='label1', row=1, col=i+1)
    fig.update_yaxes(title_text='label2', row=1, col=1)

fig.show()