带有 2 个直接标签的 Plotly 条形图

Plotly bar chart with 2 direct labels

我有一些要在条形图中绘制的 DataFrame。

这是一个数据框示例:

Here is an example of dataframe

我想在图 2 上显示直接数据标签,但无论如何都做不到。我想显示用逗号分隔的计数和份额(例如“3.3M, 0.88”)。谁能帮帮我?

下面是我的代码:


    import plotly.express as px
    fig = px.bar(
        df, x="range", y="count", hover_data=["share"], color="range", text="count", height=500, width=950,
        color_discrete_sequence = px.colors.sequential.Plasma_r
                )
    fig.update_layout(xaxis_type="category")
    fig.update_traces(texttemplate='%{text:.2s,  }', textposition='outside')
    pio.write_html(fig, 'cell_id.html')
    fig.show()

Here is an example of graph

先谢谢你!

我遇到了同样的问题,解决方法如下(我以你的数据为例):

import pandas as pd
import plotly.express as px
x = [1, 2, 3, 4, 5]
y = [3300000, 290000, 88000, 40000, 57000]
df = pd.DataFrame(dict(range=['1-10', '11-20', '21-30', '31-40', '41 or above'],
                       count=[3322933, 287372, 87938, 40061, 56767], share=[0.88, 0.08, >0.02, 0.01, 0.01]))

fig = px.bar(df, x='range', y='count', hover_data=['share'], color='range',
             text=('{}, {:.2f}'.format(df['count'][0], df['share'][0]),
                   '{}, {:.2f}'.format(df['count'][1], df['share'][1]),
                   '{}, {:.2f}'.format(df['count'][2], df['share'][2]),
                   '{}, {:.2f}'.format(df['count'][3], df['share'][3]),
                   '{}, {:.2f}'.format(df['count'][4], df['share'][4])),
             height=500, width=950, color_discrete_sequence = 
px.colors.sequential.Plasma_r)

fig.update_layout(xaxis_type="category")
fig.update_traces( textposition='outside')
fig.show()

结果如下图:

因此您必须将直接标签作为列表添加到参数 px.bar(text=list()) 并为每个柱创建一个单独的条目。

通过像这样更改条目

text=(`{}people, {:.2f}%'.format(df['count'][0], df['share'][0]*100)`, ...)

3322933people, 88%

您可以在直接标签中添加更多详细信息。

我不知道是否有更优雅的编码方式,但这对我有用。

希望对您有所帮助。