Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Matplotlib Chart not Animating / Pandas Data Issue

I'm experimenting with Matplotlib animated charts currently. Having an issue where, using a public dataset, the data isn't animating. I am pulling data from a public CSV file following some of the guidance from this post (which has to be updated a bit for things like the URL of the data). I've tested my Matplotlib installation, and it displays static test data without issue in a variety of formats. Not sure if this is a problem in Pandas getting the data across or something I've missed with the animation.

Code:

import matplotlib.animation as ani
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

url = 'https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_deaths_global.csv'
df = pd.read_csv(url, delimiter=',', header='infer')
df_interest = df.loc[
    df['Country/Region'].isin(['United Kingdom', 'US', 'Italy', 'Germany'])
    & df['Province/State'].isna()]
df_interest.rename(
    index=lambda x: df_interest.at[x, 'Country/Region'], inplace=True)
df1 = df_interest.transpose()
df1 = df1.drop(['Province/State', 'Country/Region', 'Lat', 'Long'])
df1 = df1.loc[(df1 != 0).any(1)]
df1.index = pd.to_datetime(df1.index)

print(df1)

color = ['red', 'green', 'blue', 'orange']
fig = plt.figure()
plt.xticks(rotation=45, ha="right", rotation_mode="anchor")  # rotate the x-axis values
plt.subplots_adjust(bottom=0.2, top=0.9)  # ensuring the dates (on the x-axis) fit in the screen
plt.ylabel('No of Deaths')
plt.xlabel('Dates')


def buildmebarchart(i=int):
    plt.legend(df1.columns)
    p = plt.plot(df1[:i].index, df1[:i].values)  # note it only returns the dataset, up to the point i
    for i in range(0, 4):
        p[i].set_color(color[i])  # set the colour of each curve


animator = ani.FuncAnimation(fig, buildmebarchart, interval=50)
plt.show()

Result (a static graph with no data): enter image description here

UPDATE:

It appears to be this line of pandas code that might be the culprit:

p = plt.plot(df1[:i].index, df1[:i].values)

The df1[:i].index and .values are empty when I insert a breakpoint to print them out.

like image 974
Michael Hawkins Avatar asked Oct 15 '25 17:10

Michael Hawkins


1 Answers

Actually, your code is fine. I can successfully run it as a script without making any changes. Here's my environment:

python                    3.8.5
pandas                    1.1.3
matplotlib                3.3.2

But I suspect, that you are working in Jupyter-Notebook. In this case you have to make some changes. First, set up matplotlib to work interactively in the notebook. You can use ether notebook or nbAgg as a backend (see The builtin backends for more info):

%matplotlib notebook

Next, deactivate the last line of code:

#plt.show() <- comment or delete this line

Should work. Take into account that I use Jupyter-Notebook version 6.1.4. If the problem persists, update the description to reflect your environment.


P.S. Try ipympl as an alternative backend.

like image 86
Vitalizzare Avatar answered Oct 17 '25 15:10

Vitalizzare



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!