2016-09-10 197 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