2016-09-10 200 views
3

这篇文章是有点长,所以这里是最终的“问”前期:绘图分组日期时间 - 熊猫

有没有办法来改变所产生的groupby的x轴/索引或方式来传递axvspan函数的其他类型参数?

我有一个DataFrame与日期时间列,我已经编组了yearweekofyear。这工作正常,但x轴显示为一个元组。我想axvspan,但我不知道该处理元组。

import numpy as np 
import pandas as pd 
import datetime 
from matplotlib import pylab 
import matplotlib.pyplot as plt 
%matplotlib inline 

query = ("https://data.cityofchicago.org/resource/6zsd-86xi.json?$where=year>2010") 
raw_data = pd.read_json(query) 

以下是DataFrame的概述。我将要使用date列。

raw_data.info() 
<class 'pandas.core.frame.DataFrame'> 
RangeIndex: 1706960 entries, 0 to 1706959 
Data columns (total 22 columns): 
arrest     bool 
beat     int64 
block     object 
case_number    object 
community_area   float64 
date     datetime64[ns] 
description    object 
district    float64 
domestic    bool 
fbi_code    object 
id      int64 
iucr     object 
latitude    float64 
location    object 
location_description object 
longitude    float64 
primary_type   object 
updated_on    object 
ward     float64 
x_coordinate   float64 
y_coordinate   float64 
year     int64 
dtypes: bool(2), datetime64[ns](1), float64(7), int64(3), object(9) 
memory usage: 263.7+ MB 

首先,过滤所有的犯罪,但HOMICIDES。

# get murders 
raw_data = raw_data[raw_data["primary_type"] == "HOMICIDE"] 

# plot murder count by year and week of the year 
plt.figure(figsize=(18, 6)) 
raw_data.groupby([raw_data.date.dt.year, 
        raw_data.date.dt.weekofyear])["community_area"].size().plot() 

Resulting Plot

所以,你可以看到,x轴表示为元组。就像我之前说的,我想添加一个axvspan为我的情节添加一个任意的绿色范围。如果x轴保持它的日期时间结构,我可以把值函数像这样,和它的工作:

这将灯罩图表从2015年12月1日,在绿色的2016年1月1日。有没有办法将得到的groupby的x轴/索引或将其他类型的参数传递给axvspan函数的方法?

回答

0

好吧,我把下面的拷贝复制并重新发现了resample方法,以及pandas一般如何处理时间序列数据。下面的代码做了(我的原始数据集合)的伎俩:

# doesn't really matter which column I choose, I just picked one 
murders = raw_data["community_area"] 
murders.index = raw_data["date"] 

plt.figure(figsize=(18, 6)) 
murders.resample("W-MON").count().plot() # weekly, every Monday 

min_date = min(murders.index) 
release_date = datetime.strptime('2015-11-24 12:00:00', "%Y-%m-%d %H:%M:%S") 
max_date = max(murders.index) 

pylab.axvspan(min_date, 
       release_date, 
       facecolor='g', alpha=0.05) # green span 
pylab.axvspan(release_date, 
       max_date, 
       facecolor='r', alpha=0.075) # red span 
pylab.show() 

enter image description here