Python 绘制分组日期时间-熊猫
这篇文章有点长,所以这里有一个终极的“提问”: 是否有方法转换生成的Python 绘制分组日期时间-熊猫,python,datetime,pandas,matplotlib,Python,Datetime,Pandas,Matplotlib,这篇文章有点长,所以这里有一个终极的“提问”: 是否有方法转换生成的groupby的x轴/索引,或者将其他类型的参数传递给axvspan函数? 我有一个带有日期时间列的DataFrame,我按year和weekofyear对其进行了分组。这可以正常工作,但x轴显示为元组。我想axvspan,但我不知道该由谁来处理元组 import numpy as np import pandas as pd import datetime from matplotlib import pylab import
groupby
的x轴/索引,或者将其他类型的参数传递给axvspan
函数?
我有一个带有日期时间列的DataFrame
,我按year
和weekofyear
对其进行了分组。这可以正常工作,但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)
下面是数据帧的概述。我将使用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
如您所见,x轴表示为元组。正如我之前所说,我想添加一个axvspan
,在绘图中添加任意的绿色跨度。如果x轴保持它的datetime结构,我可以像这样在函数中输入值,它会工作:
pylab.axvspan(datetime.strptime('2015-12-1 13:40:00', "%Y-%m-%d %H:%M:%S"),
datetime.strptime('2016-1-1 13:40:00', "%Y-%m-%d %H:%M:%S"),
facecolor='g', alpha=0.05) # green span
这将使2015年12月1日至2016年1月1日的图表呈绿色。有没有一种方法可以转换生成的
groupby
的x轴/索引,或者将其他类型的参数传递给axvspan
函数?好的,我清理了ole副本,重新发现了重采样
方法,以及pandas
处理时间序列数据的能力。下面的代码起到了作用(坚持使用我的原始数据集):
pylab.axvspan(datetime.strptime('2015-12-1 13:40:00', "%Y-%m-%d %H:%M:%S"),
datetime.strptime('2016-1-1 13:40:00', "%Y-%m-%d %H:%M:%S"),
facecolor='g', alpha=0.05) # green span
# 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()