проблема в построении нескольких списков с помощью matplotlib - PullRequest
2 голосов
/ 03 мая 2020

Я пишу сценарий, который можно использовать для построения коварных данных временных рядов по стране. Это нормально работает, когда я строю одну страну, но масштаб на оси Y напечатан соответствующим образом. График, который я получаю Проблема заключается в том, что после печати максимального значения для одной страны ось y экстраполируется с меньшими значениями для построения точек данных последующих стран. Код для моего скрипта выглядит следующим образом:

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'])

1 Ответ

1 голос
/ 03 мая 2020

Если вы можете использовать модуль pandas, ваша работа будет намного проще:

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()

Результат:
enter image description here

...