如何缩小Plotly分组堆叠条形图组间间隙及优化图表?
解决方案:调整分组堆叠条形图间隙与优化可视化
一、减小分组条形间隙(原需求实现)
要让各组条形几乎无间距相邻,核心是调整条形宽度和组间间隙参数:
import numpy as np import pandas as pd import plotly.graph_objects as go rand_list = np.random.rand(30) df = pd.DataFrame( dict( week=[1.2,1.2,1.3,1.3,1.6,1.6,1.7,1.7,4.4,4.4] * 3, layout=["abc","abc","def","def", "ghi", "ghi"] * 5, response=["0", "1"] * 15, cnt= list(rand_list), ) ) fig = go.Figure() fig.update_layout( template="simple_white", xaxis=dict(title_text="x-label"), yaxis=dict(title_text="y-label", showticklabels=False), barmode="stack", bargap=0.01, # 极小化组间间隙 ) colors = ["#2A66DE", "#FFC32B"] for r, c in zip(df.response.unique(), colors): plot_df = df[df.response == r] fig.add_trace( go.Bar( x=[plot_df.week, plot_df.layout], y=plot_df.cnt, name=r, marker_color=c, width=0.9 # 增大条形宽度,填充分组空间 ), ) fig.show()
修改说明:
width=0.9:让单个分组内的堆叠条形尽可能填满分组的横向空间bargap=0.01:将不同分组之间的间隙设置为极小值,实现近乎无间距的效果
二、更优可视化方案(组内无间隙+颜色区分响应类型)
如果希望用颜色区分response类别而非依赖X轴标签,同时保证组内堆叠无间隙,可以合并分组维度并简化X轴:
import numpy as np import pandas as pd import plotly.graph_objects as go rand_list = np.random.rand(30) df = pd.DataFrame( dict( week=[1.2,1.2,1.3,1.3,1.6,1.6,1.7,1.7,4.4,4.4] * 3, layout=["abc","abc","def","def", "ghi", "ghi"] * 5, response=["0", "1"] * 15, cnt= list(rand_list), ) ) # 合并week和layout为统一分组标签,简化X轴展示 df["group"] = df["week"].astype(str) + "-" + df["layout"] fig = go.Figure() fig.update_layout( template="simple_white", xaxis=dict(title_text="分组(周-布局)", tickangle=45), # 旋转标签避免重叠 yaxis=dict(title_text="y-label", showticklabels=False), barmode="stack", bargap=0.01, # 分组间近乎无间隙 legend_title="响应类型" # 明确图例含义 ) colors = ["#2A66DE", "#FFC32B"] for r, c in zip(df.response.unique(), colors): # 按合并后的分组聚合数据,确保每个分组的堆叠值正确 plot_df = df[df.response == r].groupby("group")["cnt"].sum().reset_index() fig.add_trace( go.Bar( x=plot_df["group"], y=plot_df["cnt"], name=f"响应{r}", marker_color=c, width=0.9 ), ) fig.show()
优化点说明:
- 合并分组维度:将
week和layout合并为group列,让X轴标签更简洁,避免双层轴的混乱 - 颜色区分核心维度:用颜色对应
response类别,通过图例展示映射关系,无需依赖X轴标签传递信息 - 组内无间隙:Plotly的
stack模式默认组内堆叠条形无间隙,无需额外设置 - 可读性提升:旋转X轴标签避免重叠,添加图例标题明确含义
内容的提问来源于stack exchange,提问作者Soumya Ranjan Sahoo
相关产品推荐
相关产品推荐

