Search code examples
pythonplotlyplotly-python

How to label a grouped bar chart using plotly express?


I want to add data labels to the tops of bar charts in plotly express. I'm using two different columns from the data frame so I can't use the "colors" method. I want to define "text" for each bar so it shows the data on top of the bar. Here is an MRE.

import pandas as pd
import plotly.express as px

x = ['Aaron', 'Bob', 'Chris']
y1 = [5, 10, 6]
y2 = [8, 16, 12]

fig = px.bar(x=x, y=[y1,y2],barmode='group')
fig.show()

I tried:

fig = px.bar(x=x, y=[y1,y2],text=[y1,y2], barmode='group')

But this doesn't work.


Solution

  • Using your setup, just add the following to the mix:

    texts = [y1, y2]
    for i, t in enumerate(texts):
        fig.data[i].text = t
        fig.data[i].textposition = 'outside'
    

    Result:

    enter image description here

    Complete code:

    import pandas as pd
    import plotly.express as px
    
    x = ['Aaron', 'Bob', 'Chris']
    y1 = [5, 10, 6]
    y2 = [8, 16, 12]
    
    fig = px.bar(x=x, y=[y1,y2],barmode='group')
    
    texts = [y1, y2]
    for i, t in enumerate(texts):
        fig.data[i].text = t
        fig.data[i].textposition = 'outside'
    fig.show()