Nipul Sindwani
Nipul Sindwani

Reputation: 81

problem in plotting multiple lists using matplotlib

I am writing a script which can be used to plot the country wise covid time-series data. It is working fine when I plot a single country but The scale at Y-axis is in appropriately printed. Plot which I am getting The Problem is after printing the maximum value for one country the y axis is extrapolated with smaller values to plot the data points of subsequent countries. The code for my script is as follows

import requests
from contextlib import closing
import csv
import matplotlib.pyplot as plt
url = "https://raw.githubusercontent.com/datasets/covid-19/master/data/countries-aggregated.csv"

def prepareCountryWiseData(country):
    countryWise = {}
    with closing(requests.get(url, stream=True)) as r:
        f = (line.decode('utf-8') for line in r.iter_lines())
        reader = csv.reader(f, delimiter=',', quotechar='"')
        active = []
        recovered = []
        dates = []
        for row in reader:    
             if row[1] == country:
                     dates.append(row[0])
                     active.append(row[2])
                     recovered.append(row[3])
        return (dates, active, recovered)

def plotCountryWiseData(countryList):
    plotable = []
    for country in countryList:
            dates,active,recovered = (prepareCountryWiseData(country))
            plt.plot(active)                
    plt.ylabel('active_cases')
    plt.legend(countryList)
    plt.show()
    plotCountryWiseData(['India','US','Italy'])

Upvotes: 2

Views: 452

Answers (1)

mechanical_meat
mechanical_meat

Reputation: 169284

If you can use the pandas module your job would be much easier:

import pandas as pd, matplotlib.pyplot as plt

url = "https://raw.githubusercontent.com/datasets/covid-19/master/data/countries-aggregated.csv"
df = pd.read_csv(url)

fig,ax = plt.subplots()

for k,g in df[df['Country'].isin(['India','US','Italy'])].groupby('Country'):
    ax = g.plot(ax=ax,kind='line',x='Date',y='Confirmed',label=k) 

plt.gcf().suptitle('Active Cases')
plt.show()

Result:
enter image description here

Upvotes: 1

Related Questions