1
votes

I'm new to visualizing with plotly and am trying to create an animated bubble chart. I have a dataframe of the happiness score, GDP per capita, Social support of all countries in the world from the years 2015 to 2019. I have followed a tutorial on how to make a simple animated bubble chart to slide over the years. This is my code:

fig = px.scatter(df_total_all_years, x="GDP per capita", y="Score", animation_frame='Year', animation_group='Country', size="Social support",  color='Country',height=800, hover_name='Country', log_x=True, size_max=60)

fig.layout.updatemenus[0].buttons[0].args[1]['frame']['duration'] = 700

fig.update_layout(title="Happiness Score")

fig.show()

It does show me a bubble chart and I can slide the years but the values (the bubble charts) do not change when I slide over the years. When I hover over the bubbles it still shows me the value of 2015 when, for example, I have slided to the year 2019.

Can someone please advise me what I did wrong in my code?

Thank you so much!

1
Can you post your data, so that we can reproduce your code. Take a look here if you are not sure how. stackoverflow.com/help/minimal-reproducible-example - Kristian Haga
Thanks for the suggestion! I was not aware I had to add this yet. Below someone has helped me with providing sample data. Do you know how to help me with the problem? Thanks! - Roxanna Wijtsma
Your code seems fine to me. If it's not working on your dataset, there is a good chance that the problem lies there. If you post the data you are using we can take a closer look. - Kristian Haga
it is a dataset similiar to the one below, only much bigger. It works in other graphs and in normal bubble charts, so I think the dataset should be fine. Could it be that the problem is that I try to execute it in Visual studio code? Because I imported plot from the plotly.offline library and did> plot(fig). it opened in my chrome browser and there the graph worked perfectly and showing all the years. But in my ipynb file in visual studio code it doesn't change years.. - Roxanna Wijtsma
You are correct, this seems to be an issue with VSCode. Have you tried running your notebooks in JupyterLab instead? Link for installation guide. plotly.com/python/getting-started/#jupyterlab-support-python-35 - Kristian Haga

1 Answers

2
votes

I didn't have the data for your question, so I created the data from here. On the right side menu [Chapter 2 Online Data Expanded with Trust and Governance] (https://s3.amazonaws.com/happiness-report/2015/Chapter2OnlineData_Expanded-with-Trust-and-Governance.xlsx) from the sheet name: [Chapter2OnlineData_Expanded-wit] processed. Next time you post the data together with the data, you'll get an answer more quickly.

df_total.columns = ['country', 'Year', 'Score', 'GDP per capita','Social support','Healthy life', 'Continent']
df_total.fillna(0, inplace=True)

df_total.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 1106 entries, 0 to 1105
Data columns (total 7 columns):
 #   Column          Non-Null Count  Dtype  
---  ------          --------------  -----  
 0   country         1106 non-null   object 
 1   Year            1106 non-null   int64  
 2   Score           1106 non-null   float64
 3   GDP per capita  1106 non-null   float64
 4   Social support  1106 non-null   float64
 5   Healthy life    1106 non-null   float64
 6   Continent       1106 non-null   object 
dtypes: float64(4), int64(1), object(2)
memory usage: 69.1+ KB

df_total.head()
    country Year    Score   GDP per capita  Social support  Healthy life    Continent
0   Afghanistan 2008    3.723590    7.178332    0.450662    47.862461   South Asia
1   Afghanistan 2009    4.401778    7.344422    0.552308    48.275078   South Asia
2   Afghanistan 2010    4.758381    7.400804    0.539075    48.673412   South Asia
3   Afghanistan 2011    3.831719    7.435526    0.521104    49.053383   South Asia
4   Afghanistan 2012    3.782938    7.545960    0.520637    49.415783   South Asia

import plotly.express as px                

fig = px.scatter(df_total, x="GDP per capita", y="Score",
                 animation_frame='Year', animation_group='country',
                 size="Social support", color='Continent', 
                 height=800, hover_name='country', log_x=True, size_max=60)

fig.layout.updatemenus[0].buttons[0].args[1]['frame']['duration'] = 700

fig.update_layout(title="Happiness Score")

fig.show()

enter image description here