Plotly Express 或 Seaborn 中二维热图的成对图?

问题描述 投票:0回答:1

我有一个如下所示的 Pandas 数据框:

    df = pd.DataFrame({'gender': [1,2,1,1,2,1],
                       'rating': [2,1,1,3,4,5],
                       'speed': [1,5,5,3,2,4],
                       'value':[4,4,3,2,2,1],
                       'appearance':[1,2,3,3,1,1],
                       'will_buy': [2,2,1,5,2,3]})

这是针对消费者研究的,其中列都是分类的,并且只采用一组有限的固定值。例如,在“性别”中,1 可能表示“男性”,而 2 可能表示“女性”。在“价值”中,1 可能表示“差”,而 5 可能表示“优秀”。

查看成对的数据图以注意任何趋势会很有用。

我尝试使用 Plotly Express 创建一对图,这是用于 Streamlit 仪表板的:

pairplot_fig = px.scatter_matrix(df, dimensions = df.columns)
st.plotly_chart(pairplot_fig)

如您所见,由于数据的分类性质,配对图并不能提供很多信息。例如,在某个位置可能有很多观察结果,但它只显示为一个点。此外,由于缺少间距,左边缘的列名变得杂乱无章。

然后我尝试创建一个 2D 热图,显示每个位置的观察数量。这将有助于揭示诸如“许多为价值选择 5 的人也倾向于为速度选择 5”之类的见解。

    heatmap_fig = px.density_heatmap(df, x= 'gender', y='rating', 
                              marginal_x="histogram", marginal_y="histogram")
    st.plotly_chart(heatmap_fig, theme = None)

不幸的是,我只能弄清楚如何生成1列VS 1列的热图。生成一个多列对多列的热图是理想的,就像对图一样。

我希望在 Plotly Express 中这样做,因为它是交互式的。但如果那不可能,其他绘图包(如 Seaborn)中的解决方案也会有所帮助。

谢谢

matplotlib plotly seaborn
1个回答
0
投票

您可能需要使用子图并根据需要进行配置:

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

df = pd.DataFrame({'gender': [1, 2, 1, 1, 2, 1],
                   'rating': [2, 1, 1, 3, 4, 5],
                   'speed': [1, 5, 5, 3, 2, 4],
                   'value': [4, 4, 3, 2, 2, 1],
                   'appearance': [1, 2, 3, 3, 1, 1],
                   'will_buy': [2, 2, 1, 5, 2, 3]})

fig = make_subplots(1, 2, horizontal_spacing=0.15)
fig.add_trace(go.Heatmap(z=df[["gender", "rating"]]), 1, 1)
fig.add_trace(go.Heatmap(z=df[["gender", "rating"]]), 1, 2)

fig.show()

© www.soinside.com 2019 - 2024. All rights reserved.