python - 使用 matplotlib 绘制多个列表的问题
问题描述
我正在编写一个脚本,可用于绘制国家明智的 covid 时间序列数据。当我绘制一个国家/地区时它工作正常,但 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'])
解决方案
如果您可以使用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()
推荐阅读
- sql-server - tSQLt 测试中的模拟和安全权限如何工作?
- css - 如何设置 CSS 网格以显示未知数量的动态数据
- html - 需要在悬停时更改网格中图像的图像
- javascript - 如何使用 Jest 测试同一类中的方法调用?
- javascript - 如何不制作 div 堆栈?
- javascript - 在 Vue 中的 axios 请求后更新关注状态
- java - SQLite 数据库游标返回错误的资源 ID
- java - 应用程序无法开始使用 CXF 码头
- sql - 将字符串转换为生日(不在未来)
- python - 如果列名本身是 Excel 文件中的日期,如何处理 pandas 数据框