如何用Plotly的make_subplot结合go.Histogram实现多分组直方图?
用Plotly Graph Objects实现按Cluster分组的直方图
问题背景
原本用Plotly Express可以轻松生成按Cluster分组的直方图:
fig = px.histogram(df, x="% INVESTIMENTO",color='Cluster') fig.show()
但改用make_subplots结合graph_objects.Histogram时,以下代码报错:
fig = make_subplots(rows=1, cols=1) fig.add_trace(go.Histogram(x=df["% INVESTIMENTO"],color=df['Cluster']), row=1, col=1)
错误信息:
ValueError: Invalid property specified for object of type plotly.graph_objs.Histogram: 'color'
解决方案
go.Histogram没有color参数,要实现分组效果,需要按Cluster的不同取值分别创建直方图trace,并通过name参数标记分组,同时可以指定每个分组的颜色(和Plotly Express默认配色对齐)。
完整代码示例
import plotly.graph_objects as go from plotly.subplots import make_subplots import plotly.express as px # 获取Plotly Express的默认配色(可选,保持和px效果一致) color_discrete_map = px.colors.qualitative.Plotly # 创建子图 fig = make_subplots(rows=1, cols=1) # 遍历每个Cluster分组,添加对应的直方图trace for cluster in df['Cluster'].unique(): # 筛选当前Cluster的数据 cluster_data = df[df['Cluster'] == cluster] # 添加直方图,设置名称和颜色 fig.add_trace( go.Histogram( x=cluster_data["% INVESTIMENTO"], name=f"Cluster {cluster}", # 显示在图例的名称 marker_color=color_discrete_map[list(df['Cluster'].unique()).index(cluster)] ), row=1, col=1 ) # 设置布局,开启重叠模式(和px.histogram默认一致) fig.update_layout( barmode='overlay', # 分组直方图默认是重叠模式,也可改为'group'实现并排显示 xaxis_title="% INVESTIMENTO", yaxis_title="Count", title="按Cluster分组的投资占比直方图" ) # 调整透明度,避免重叠遮挡 fig.update_traces(opacity=0.75) fig.show()
关键说明
barmode='overlay':对应Plotly Express直方图的默认显示模式,若想让分组并排显示,可改为barmode='group'marker_color:利用Plotly Express的默认配色,保证和原px代码生成的颜色一致- 循环添加trace:每个Cluster对应一个独立的直方图trace,通过
name区分分组,自动生成图例
内容的提问来源于stack exchange,提问作者Kotynho
相关产品推荐
相关产品推荐

