如何在Plotly柱状图中同时显示数值与百分比?
Plotly柱状图显示数值与百分比的实现方案
要在柱状图的每个柱子旁同时展示数值和百分比,需手动计算每个柱子数值占对应系列总和的比例,再通过text参数配置显示格式,以下是具体修改方案:
完整修改代码
import pandas as pd import plotly.graph_objects as go data = {'bin': [1, 2, 1, 2, 3], 'id': [1, 2, 3, 3, 3], 'type': [0, 1, 1, 1, 0]} df = pd.DataFrame(data=data) df1 = df[df['type']==0] df2 = df[df['type']==1] dfs = {"df1" : df1, "df2" : df2} fig = go.Figure(layout=go.Layout( font=dict(family="Franklin Gothic", size=12), height=1000, width=1000 )) for series_name, tmp_df in dfs.items(): grouped_data = tmp_df.groupby(['bin'])['id'].nunique() x_vals = grouped_data.index y_vals = grouped_data.values total = y_vals.sum() # 分两行显示:数值在上,百分比在下 display_text = [f"{val}<br>{(val/total)*100:.1f}%" for val in y_vals] # 若需同一行显示,替换为下面这行: # display_text = [f"{val} ({(val/total)*100:.1f}%)" for val in y_vals] fig.add_trace(go.Bar( x=x_vals, y=y_vals, name=series_name, text=display_text, textposition='outside' )) fig.update_layout(barmode='group') fig.show()
核心修改说明
- 手动计算百分比:柱状图不会像饼图自动生成百分比,需先计算当前系列的总数值,再算出每个柱子的占比
- 配置显示文本:通过
text参数传入预先组合好的字符串列表,可自由选择分两行或同一行的格式 - 调整文本位置:
textposition='outside'确保文本显示在柱子外侧,避免被柱子遮挡
内容的提问来源于stack exchange,提问作者Azamat
相关产品推荐
相关产品推荐

