Search code examples
pythonjupyter-notebookplotlypie-chartplotly-python

Plotly: Pie chart only shows the legend


I'm trying to create a pie chart in plotly. I have dataframe that is similar to this:

>>> land_cover                                         count
1   Closed (>40%) broadleaved evergreen or semidec...   1102
2   Closed broadleaved forest or shrubland permane...   22
3   Closed grassland                                     213
4   Closed to open broadleaved decidous shrubland       3
5   Closed to open broadleaved evergreen or semid...    3480
6   Closed to open herbaceousvegetation (or lichen...   501
7   Closed to open shrubland                           9200
8   Closedto open broadleavedforest regularly floo...   89

I'm trying to create the chart with plotly like this:

import plotly.express as px
import plotly.graph_objects as go


fig = px.pie(df, values='count', names='land_cover', title='land cover')
fig.update_layout(title_x=0.48)

fig.show()

But I get a chart that only shows the legend without the pie chart itself.

enter image description here

I have created other pie charts exactly with this script so I don't find the reason why here it doesn't generate the pie chart properly.

What can be the cause for this?


Solution

  • I'm fairly certain that this is purely a data problem. I edited your sample data into a comma separated version:

    land_cover,count
    1,Closed (>40%) broadleaved evergreen or semidec,1102
    2,Closed broadleaved forest or shrubland permane,22
    3,Closed grassland,213
    4,Closed to open broadleaved decidous shrubland,3
    5,Closed to open broadleaved evergreen or semid,3480
    6,Closed to open herbaceousvegetation (or lichen,501
    7,Closed to open shrubland,9200
    8,Closedto open broadleavedforest regularly floo,89
    

    And then I dumped it into a dict using df.to_dict() for easier reproducibility. Now the complete code snippet below produces the following plot with no issues:

    Plot

    enter image description here

    Code

    import plotly.express as px
    import plotly.graph_objects as go
    import pandas as pd
    
    df = pd.DataFrame({'land_cover': {1: 'Closed (>40%) broadleaved evergreen or semidec',
                                      2: 'Closed broadleaved forest or shrubland permane',
                                      3: 'Closed grassland',
                                      4: 'Closed to open broadleaved decidous shrubland',
                                      5: 'Closed to open broadleaved evergreen or semid',
                                      6: 'Closed to open herbaceousvegetation (or lichen',
                                      7: 'Closed to open shrubland',
                                      8: 'Closedto open broadleavedforest regularly floo'},
                                     'count': {1: 1102, 2: 22, 3: 213, 4: 3, 5: 3480, 6: 501, 7: 9200, 8: 89}})
    
    fig = px.pie(df, values='count', names='land_cover', title='land cover')
    fig.update_layout(title_x=0.48)
    
    fig.show()