如何为Plotly Express直方图的每个柱状条嵌入对应独立标签
结论
完全可以实现该效果,你可以选择提前聚合数据绘图,或者直接修改生成的直方图属性来达到需求,以下是两种可直接运行的实现方案:
方案1:通用预处理方案(适合任意数据量)
先对数据做分组聚合,统计每个x值对应的标签列表和数量,再绘图:
import plotly.express as px import pandas as pd df = pd.DataFrame({'name':['label1', 'label2','label3', 'label4', 'label1'], 'val1':[1,2,1,2,1]}) # 按x轴值分组,聚合去重后的标签、统计每个分组的数量 agg_df = df.groupby('val1', as_index=False).agg( # 可根据需求调整是否保留重复标签 labels = ('name', lambda x: list(x.unique())), count = ('name', 'count') ) # 绘图时指定text参数为聚合后的标签列 fig = px.bar(agg_df, x='val1', y='count', text='labels') # 调整标签显示位置为柱子内部居中 fig.update_traces(textposition='inside') fig.show()
如果你的x轴是连续数值需要自定义分箱规则,可以先使用pd.cut()方法对x列做分箱处理,再按分箱结果分组聚合标签即可,逻辑和上述代码完全一致。
方案2:快速修改方案(适合小数据量固定场景)
直接对生成的直方图的文本属性赋值:
import plotly.express as px import pandas as pd df = pd.DataFrame({'name':['label1', 'label2','label3', 'label4', 'label1'], 'val1':[1,2,1,2,1]}) fig = px.histogram(df, x='val1', nbins=3) # 直接给每个柱子对应位置设置标签 fig.data[0].text = [['label1', 'label3'], ['label2', 'label4']] fig.update_traces(textposition='inside') fig.show()
内容的提问来源于stack exchange,提问作者CryptTP
相关产品推荐
相关产品推荐

