Python熊猫多线图

时间:2017-06-25 20:35:49

标签: python pandas matplotlib graph

我想根据一个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个不同的图,而我想要在同一图像中,并且组要显示为不同的颜色。有人可以帮忙吗?

1 个答案:

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