我想根据一个coloumn的值,从一个pandas数据帧中创建一个多线图,这些数据是基于组的数据。这里的数据来自api
import pandas as pd
import numpy as np
import calendar
import requests
import json
r = requests.get('http://data.unhcr.org/api/stats/mediterranean/monthly_arrivals_by_location.json')
js = r.json()
df = pd.DataFrame.from_records(js)
dfTop10 = df[['location','value']].\
groupby(['location']).sum().sort_values(['value'], ascending=[0])[1:5].reset_index()
grData = df[['year','month','location','value']].loc[df['location'].\
isin(dfTop10.location)].groupby(['location','year','month'])['value'].sum().reset_index()
grData['time'] = pd.to_datetime(df.year*10000+df.month*100+1,format='%Y%m%d')
grData= grData[['location','time','value']]
grData.groupby('location').plot()
此代码生成10个不同的图,而我想要在同一图像中,并且组要显示为不同的颜色。有人可以帮忙吗?
答案 0 :(得分:1)
这不是很好,但我认为它有效:
代替最后一行(groupby
行),你可以这样做:
from matplotlib import pyplot as plt
plt.figure(figsize=(15,5))
for city in set(grData['location']):
df = grData[grData['location'] == city]
plt.plot(df['time'], df['value'])
但我确信有一种更酷的方法可以做到。
要向图表添加图例,请为每个label=
添加plt.plot
参数,然后在结尾处创建图例:
. . .
for city in set(grData['location']):
df = grData[grData['location'] == city]
plt.plot(df['time'], df['value'], label=city)
plt.legend()