使用 plotly 基于组变量绘制直方图网格
Posted
技术标签:
【中文标题】使用 plotly 基于组变量绘制直方图网格【英文标题】:Plot grid of histograms based on group variable using plotly 【发布时间】:2021-03-07 07:31:20 【问题描述】:我有一个包含多个变量的数据框,其中每个变量在逻辑上连接到附加组变量的因子水平。我想绘制每个变量的直方图,以便可以“按组”显示多个直方图的网格。
这是一个示例数据框df_melt
(变量var_1
、var_2
、var_3
、var_4
在逻辑上连接到因子水平'foo'
,变量var_5
、var_6
、 var_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 - 使用下拉菜单绘制直方图不同列的代码
2021-12-22看懂 散点图矩阵(pairs plots)
R语言使用ggplot2包使用geom_density()函数绘制分组密度图(添加直方图分组颜色配置)实战(density plot)