使用 plotly 基于组变量绘制直方图网格

Posted

技术标签:

【中文标题】使用 plotly 基于组变量绘制直方图网格【英文标题】:Plot grid of histograms based on group variable using plotly 【发布时间】:2021-03-07 07:31:20 【问题描述】:

我有一个包含多个变量的数据框,其中每个变量在逻辑上连接到附加组变量的因子水平。我想绘制每个变量的直方图,以便可以“按组”显示多个直方图的网格。

这是一个示例数据框df_melt(变量var_1var_2var_3var_4在逻辑上连接到因子水平'foo',变量var_5var_6var_7属于因子级别'bar'):

import numpy as np
import pandas as pd

# simulate data and create plot-ready dataframe
np.random.seed(42)
var_values = np.random.randint(low=1,high=100,size=(100,7))
var_names = ['var_1','var_2','var_3','var_4','var_5','var_6','var_7']
group_names = ['foo','foo','foo','foo','bar','bar','bar']

df = pd.DataFrame(var_values,columns=var_names)
multi_index = pd.MultiIndex.from_arrays([df.columns,group_names],names=['variable','group'])
df.columns = multi_index
df_melt = pd.melt(df)

输出应如下所示:

这些 *** 帖子可能有助于提供答案,但我无法自己提出解决方案:

Plotting a grouped pandas data in plotly

Plotly equivalent for pd.DataFrame.hist

【问题讨论】:

您说您自己无法提出解决方案,但您能展示一下您尝试过的方法吗? 【参考方案1】:

我想出的最好的是以下。遗憾的是,这不是您想要的精美绘图格式,但我认为/希望您可以从这个开始。

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

# simulate data and create plot-ready dataframe
np.random.seed(42)
var_values = np.random.randint(low=1,high=100,size=(100,7))
var_names = ['var_1','var_2','var_3','var_4','var_5','var_6','var_7']
group_names = ['foo','foo','foo','foo','bar','bar','bar']

df = pd.DataFrame(var_values,columns=var_names)
multi_index = pd.MultiIndex.from_arrays([df.columns,group_names],names=['variable','group'])
df.columns = multi_index
df_melt = pd.melt(df)


uniq_cols = set(group_names)
for col in uniq_cols:
    rows = df_melt[df_melt['group']==col]['variable'].unique()
#     print(list(rows))
    num_vars = len(rows)
    
    fig = make_subplots(rows=1, cols=len(rows), column_titles=list(rows))
    for i, row in enumerate(rows):
        fig.add_trace(go.Histogram(x=df_melt[(df_melt['group']==col) & (df_melt['variable']==row)]['value']), 
                      row=1, col=i+1)
    
    fig.show()

【讨论】:

以上是关于使用 plotly 基于组变量绘制直方图网格的主要内容,如果未能解决你的问题,请参考以下文章

Plotly:如何以 Root 样式绘制直方图,仅显示直方图的轮廓?

在 Plotly Python 中使用时间滑块绘制连续直方图

Plotly express - 使用下拉菜单绘制直方图不同列的代码

R语言可视化:频率直方图绘制

2021-12-22看懂 散点图矩阵(pairs plots)

R语言使用ggplot2包使用geom_density()函数绘制分组密度图(添加直方图分组颜色配置)实战(density plot)