不以均匀间隔绘制连续天数
Plot no consecutive days with even intervals
我正在使用以下函数绘制图表,显示 6 年来每年 2 个月的数字
def plot_report(property_type, first_period, year_periods, month_periods):
reporting_periods = get_reporting_periods(first_period, year_periods, month_periods)
data = get_rows(df, property_type, reporting_periods)
suburbs = data.groupby(['state', 'suburb'])
fig, ax = plt.subplots()
for i, suburb in suburbs:
suburb.plot(x='yrend', y='median_price', ax=ax, linewidth=2)
ax.xaxis.set_ticks(reporting_periods)
ax.xaxis.set_major_formatter(DateFormatter("%b %y"))
ax.yaxis.set_major_formatter(formatter)
ax.grid(False)
ax.legend().set_visible(False)
fig.autofmt_xdate()
locs, labels = plt.xticks()
plt.setp(labels, rotation=90)
return plt.show()
而 reporting_periods 可能 return
[datetime.datetime(2004, 12, 1, 0, 0), datetime.datetime(2005, 1, 1, 0, 0), datetime.datetime(2003, 12, 1, 0, 0), datetime.datetime(2004, 1, 1, 0, 0), datetime.datetime(2002, 12, 1, 0, 0), datetime.datetime(2003, 1, 1, 0, 0), datetime.datetime(2001, 12, 1, 0, 0), datetime.datetime(2002, 1, 1, 0, 0), datetime.datetime(2000, 12, 1, 0, 0), datetime.datetime(2001, 1, 1, 0, 0), datetime.datetime(1999, 12, 1, 0, 0), datetime.datetime(2000, 1, 1, 0, 0)]
这是结果图:
如何在 x 轴上以相同的间隔均匀分布日期?
一些示例数据:
suburb state house yrend median_price
CHARNWOOD ACT H 31/01/91 0:00 91000
CHARNWOOD ACT H 28/02/91 0:00 90000
CHARNWOOD ACT H 31/03/91 0:00 92000
CHARNWOOD ACT H 30/04/91 0:00 92000
CHARNWOOD ACT H 31/05/91 0:00 92400
CHARNWOOD ACT H 30/06/91 0:00 94000
CHARNWOOD ACT H 31/07/91 0:00 95000
CHARNWOOD ACT H 31/08/91 0:00 95000
CHARNWOOD ACT H 30/09/91 0:00 96000
CHARNWOOD ACT H 31/10/91 0:00 97100
CHARNWOOD ACT H 30/11/91 0:00 98000
CHARNWOOD ACT H 31/12/91 0:00 98000
CHARNWOOD ACT H 31/01/92 0:00 103000
CHARNWOOD ACT H 29/02/92 0:00 105000
CHARNWOOD ACT H 31/03/92 0:00 106000
CHARNWOOD ACT H 30/04/92 0:00 109000
CHARNWOOD ACT H 31/05/92 0:00 110000
CHARNWOOD ACT H 30/06/92 0:00 113975
CHARNWOOD ACT H 31/07/92 0:00 117000
CHARNWOOD ACT H 31/08/92 0:00 118000
CHARNWOOD ACT H 30/09/92 0:00 119725
CHARNWOOD ACT H 31/10/92 0:00 120000
CHARNWOOD ACT H 30/11/92 0:00 123250
CHARNWOOD ACT H 31/12/92 0:00 123250
CHARNWOOD ACT H 31/01/93 0:00 123500
CHARNWOOD ACT H 28/02/93 0:00 123500
CHARNWOOD ACT H 31/03/93 0:00 123500
CHARNWOOD ACT H 30/04/93 0:00 125000
CHARNWOOD ACT H 31/05/93 0:00 123500
CHARNWOOD ACT H 30/06/93 0:00 123000
CHARNWOOD ACT H 31/07/93 0:00 120000
CHARNWOOD ACT H 31/08/93 0:00 120000
CHARNWOOD ACT H 30/09/93 0:00 120000
CHARNWOOD ACT H 31/10/93 0:00 120000
CHARNWOOD ACT H 30/11/93 0:00 118500
CHARNWOOD ACT H 31/12/93 0:00 118500
CHARNWOOD ACT H 31/01/94 0:00 118200
CHARNWOOD ACT H 28/02/94 0:00 119000
CHARNWOOD ACT H 31/03/94 0:00 118500
CHARNWOOD ACT H 30/04/94 0:00 118500
CHARNWOOD ACT H 31/05/94 0:00 118200
CHARNWOOD ACT H 30/06/94 0:00 119500
CHARNWOOD ACT H 31/07/94 0:00 119500
CHARNWOOD ACT H 31/08/94 0:00 119500
CHARNWOOD ACT H 30/09/94 0:00 118850
CHARNWOOD ACT H 31/10/94 0:00 119500
CHARNWOOD ACT H 30/11/94 0:00 116500
CHARNWOOD ACT H 31/12/94 0:00 116000
CHARNWOOD ACT H 31/01/95 0:00 115000
CHARNWOOD ACT H 28/02/95 0:00 112250
CHARNWOOD ACT H 31/03/95 0:00 110000
CHARNWOOD ACT H 30/04/95 0:00 110000
CHARNWOOD ACT H 31/05/95 0:00 109975
CHARNWOOD ACT H 30/06/95 0:00 106000
CHARNWOOD ACT H 31/07/95 0:00 106000
CHARNWOOD ACT H 31/08/95 0:00 106000
CHARNWOOD ACT H 30/09/95 0:00 104000
CHARNWOOD ACT H 31/10/95 0:00 103500
CHARNWOOD ACT H 30/11/95 0:00 101000
CHARNWOOD ACT H 31/12/95 0:00 101750
CHARNWOOD ACT H 31/01/96 0:00 102750
CHARNWOOD ACT H 29/02/96 0:00 103000
CHARNWOOD ACT H 31/03/96 0:00 100500
CHARNWOOD ACT H 30/04/96 0:00 100000
CHARNWOOD ACT H 31/05/96 0:00 99500
CHARNWOOD ACT H 30/06/96 0:00 98750
CHARNWOOD ACT H 31/07/96 0:00 96000
CHARNWOOD ACT H 31/08/96 0:00 97000
CHARNWOOD ACT H 30/09/96 0:00 98750
CHARNWOOD ACT H 31/10/96 0:00 98750
CHARNWOOD ACT H 30/11/96 0:00 100000
CHARNWOOD ACT H 31/12/96 0:00 98000
BELCONNEN ACT H 31/01/91 0:00 381000
BELCONNEN ACT H 28/02/91 0:00 382325
BELCONNEN ACT H 31/03/91 0:00 382000
BELCONNEN ACT H 30/04/91 0:00 385000
BELCONNEN ACT H 31/05/91 0:00 382650
BELCONNEN ACT H 30/06/91 0:00 381325
BELCONNEN ACT H 31/07/91 0:00 389000
BELCONNEN ACT H 31/08/91 0:00 388500
BELCONNEN ACT H 30/09/91 0:00 383825
BELCONNEN ACT H 31/10/91 0:00 381325
BELCONNEN ACT H 30/11/91 0:00 379000
BELCONNEN ACT H 31/12/91 0:00 374500
BELCONNEN ACT H 31/01/92 0:00 371000
BELCONNEN ACT H 29/02/92 0:00 371000
BELCONNEN ACT H 31/03/92 0:00 370700
BELCONNEN ACT H 30/04/92 0:00 370000
BELCONNEN ACT H 31/05/92 0:00 370200
BELCONNEN ACT H 30/06/92 0:00 370000
BELCONNEN ACT H 31/07/92 0:00 365000
BELCONNEN ACT H 31/08/92 0:00 370000
BELCONNEN ACT H 30/09/92 0:00 373750
BELCONNEN ACT H 31/10/92 0:00 375000
BELCONNEN ACT H 30/11/92 0:00 380000
BELCONNEN ACT H 31/12/92 0:00 381000
BELCONNEN ACT H 31/01/93 0:00 388000
BELCONNEN ACT H 28/02/93 0:00 384000
BELCONNEN ACT H 31/03/93 0:00 389000
BELCONNEN ACT H 30/04/93 0:00 395000
BELCONNEN ACT H 31/05/93 0:00 397500
BELCONNEN ACT H 30/06/93 0:00 400000
BELCONNEN ACT H 31/07/93 0:00 400000
BELCONNEN ACT H 31/08/93 0:00 397500
BELCONNEN ACT H 30/09/93 0:00 400800
BELCONNEN ACT H 31/10/93 0:00 405000
BELCONNEN ACT H 30/11/93 0:00 406500
BELCONNEN ACT H 31/12/93 0:00 122500
BELCONNEN ACT H 31/01/94 0:00 122000
BELCONNEN ACT H 28/02/94 0:00 125000
BELCONNEN ACT H 31/03/94 0:00 125000
BELCONNEN ACT H 30/04/94 0:00 125000
BELCONNEN ACT H 31/05/94 0:00 126750
BELCONNEN ACT H 30/06/94 0:00 129975
BELCONNEN ACT H 31/07/94 0:00 133725
BELCONNEN ACT H 31/08/94 0:00 137000
BELCONNEN ACT H 30/09/94 0:00 140000
BELCONNEN ACT H 31/10/94 0:00 142750
BELCONNEN ACT H 30/11/94 0:00 142750
BELCONNEN ACT H 31/12/94 0:00 149000
BELCONNEN ACT H 31/01/95 0:00 157000
BELCONNEN ACT H 28/02/95 0:00 160000
BELCONNEN ACT H 31/03/95 0:00 161875
BELCONNEN ACT H 30/04/95 0:00 165000
BELCONNEN ACT H 31/05/95 0:00 165000
BELCONNEN ACT H 30/06/95 0:00 171500
BELCONNEN ACT H 31/07/95 0:00 179000
BELCONNEN ACT H 31/08/95 0:00 185000
BELCONNEN ACT H 30/09/95 0:00 189950
BELCONNEN ACT H 31/10/95 0:00 195000
BELCONNEN ACT H 30/11/95 0:00 195500
BELCONNEN ACT H 31/12/95 0:00 198000
BELCONNEN ACT H 31/01/96 0:00 206000
BELCONNEN ACT H 29/02/96 0:00 210000
BELCONNEN ACT H 31/03/96 0:00 211500
BELCONNEN ACT H 30/04/96 0:00 219000
BELCONNEN ACT H 31/05/96 0:00 225000
BELCONNEN ACT H 30/06/96 0:00 234000
BELCONNEN ACT H 31/07/96 0:00 245000
BELCONNEN ACT H 31/08/96 0:00 245500
BELCONNEN ACT H 30/09/96 0:00 247000
BELCONNEN ACT H 31/10/96 0:00 248000
BELCONNEN ACT H 30/11/96 0:00 249500
BELCONNEN ACT H 31/12/96 0:00 248000
BRUCE ACT H 31/01/91 0:00 405900
BRUCE ACT H 28/02/91 0:00 405900
BRUCE ACT H 31/03/91 0:00 405900
BRUCE ACT H 30/04/91 0:00 405900
BRUCE ACT H 31/05/91 0:00 405900
BRUCE ACT H 30/06/91 0:00 405900
BRUCE ACT H 31/07/91 0:00 405900
BRUCE ACT H 31/08/91 0:00 405900
BRUCE ACT H 30/09/91 0:00 405900
BRUCE ACT H 31/10/91 0:00 405900
BRUCE ACT H 30/11/91 0:00 405900
BRUCE ACT H 31/12/91 0:00 405900
BRUCE ACT H 31/01/92 0:00 405900
BRUCE ACT H 29/02/92 0:00 405900
BRUCE ACT H 31/03/92 0:00 405900
BRUCE ACT H 30/04/92 0:00 405900
BRUCE ACT H 31/05/92 0:00 405900
BRUCE ACT H 30/06/92 0:00 405900
BRUCE ACT H 31/07/92 0:00 405900
BRUCE ACT H 31/08/92 0:00 405900
BRUCE ACT H 30/09/92 0:00 405900
BRUCE ACT H 31/10/92 0:00 405900
BRUCE ACT H 30/11/92 0:00 405900
BRUCE ACT H 31/12/92 0:00 405900
BRUCE ACT H 31/01/93 0:00 405900
BRUCE ACT H 28/02/93 0:00 405900
BRUCE ACT H 31/03/93 0:00 405900
BRUCE ACT H 30/04/93 0:00 405900
BRUCE ACT H 31/05/93 0:00 405900
BRUCE ACT H 30/06/93 0:00 405900
BRUCE ACT H 31/07/93 0:00 405900
BRUCE ACT H 31/08/93 0:00 405900
BRUCE ACT H 30/09/93 0:00 405900
BRUCE ACT H 31/10/93 0:00 405900
BRUCE ACT H 30/11/93 0:00 405900
BRUCE ACT H 31/12/93 0:00 405900
BRUCE ACT H 31/01/94 0:00 405900
BRUCE ACT H 28/02/94 0:00 405900
BRUCE ACT H 31/03/94 0:00 405900
BRUCE ACT H 30/04/94 0:00 339000
BRUCE ACT H 31/05/94 0:00 360000
BRUCE ACT H 30/06/94 0:00 377500
BRUCE ACT H 31/07/94 0:00 377500
BRUCE ACT H 31/08/94 0:00 377500
BRUCE ACT H 30/09/94 0:00 377500
BRUCE ACT H 31/10/94 0:00 360000
BRUCE ACT H 30/11/94 0:00 351000
BRUCE ACT H 31/12/94 0:00 351000
BRUCE ACT H 31/01/95 0:00 351000
BRUCE ACT H 28/02/95 0:00 351000
BRUCE ACT H 31/03/95 0:00 351000
BRUCE ACT H 30/04/95 0:00 351000
BRUCE ACT H 31/05/95 0:00 351000
BRUCE ACT H 30/06/95 0:00 351000
BRUCE ACT H 31/07/95 0:00 351000
BRUCE ACT H 31/08/95 0:00 351000
BRUCE ACT H 30/09/95 0:00 351000
BRUCE ACT H 31/10/95 0:00 351000
BRUCE ACT H 30/11/95 0:00 351000
BRUCE ACT H 31/12/95 0:00 351000
BRUCE ACT H 31/01/96 0:00 351000
BRUCE ACT H 29/02/96 0:00 351000
BRUCE ACT H 31/03/96 0:00 351000
BRUCE ACT H 30/04/96 0:00 351000
BRUCE ACT H 31/05/96 0:00 351000
BRUCE ACT H 30/06/96 0:00 351000
BRUCE ACT H 31/07/96 0:00 351000
BRUCE ACT H 31/08/96 0:00 302750
BRUCE ACT H 30/09/96 0:00 307750
BRUCE ACT H 31/10/96 0:00 312000
BRUCE ACT H 30/11/96 0:00 312000
import pandas as pd
from StringIO import StringIO
table = """suburb state house yrend median_price
CHARNWOOD ACT H 31/01/91 0:00 91000
CHARNWOOD ACT H 28/02/91 0:00 90000
...
BRUCE ACT H 30/11/96 0:00 312000
"""
table = table.replace("0:00", "")
sio = StringIO(table)
df = pd.read_table(sio, sep=r"\s+", parse_dates=['yrend'])
df = df.pivot(index="yrend", columns="suburb", values="median_price")
df.plot()
这里你真正需要的是用 pivot 重塑 http://pandas.pydata.org/pandas-docs/stable/reshaping.html。
编辑: 调整格式化程序,可能不完全是您需要的,但您明白了。要进行如此精细的定制,您必须求助于 matplotlib ...
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as dates
from matplotlib.ticker import FuncFormatter, NullFormatter
import pylab
from StringIO import StringIO
table = table.replace("0:00", "")
sio = StringIO(table)
df = pd.read_table(sio, sep=r"\s+", parse_dates=['yrend'])
df = df.pivot_table(index=["yrend"], columns=["state","suburb"], values=["median_price"])
fig, ax = plt.subplots()
# plot the lines
for col in df.columns:
ax.plot(df.index, df[col])
# tune the tickers
locator = dates.MonthLocator(range(1, 13), bymonthday=1, interval=6)
ax.xaxis.set_minor_locator(locator)
def _monthFmt(x, pos):
dt = pylab.num2date(x)
return dt.strftime('%Y') if dt.month == 2 else dt.strftime("%b")
formatter = FuncFormatter(_monthFmt)
ax.xaxis.set_minor_formatter(formatter)
# quiet major formatter - default the years
ax.xaxis.set_major_formatter(NullFormatter())
ax.xaxis.grid(True, which="minor")
ax.yaxis.grid()
plt.show()
除了使用 DateFormatter(就像你已经做的那样),我建议使用 DateLocator(在你的情况下 YearLocator 有意义)来定位刻度(而不是使用 [=11 手动定位它们=]):
ax.xaxis.set_major_locator(YearLocator())
我正在使用以下函数绘制图表,显示 6 年来每年 2 个月的数字
def plot_report(property_type, first_period, year_periods, month_periods):
reporting_periods = get_reporting_periods(first_period, year_periods, month_periods)
data = get_rows(df, property_type, reporting_periods)
suburbs = data.groupby(['state', 'suburb'])
fig, ax = plt.subplots()
for i, suburb in suburbs:
suburb.plot(x='yrend', y='median_price', ax=ax, linewidth=2)
ax.xaxis.set_ticks(reporting_periods)
ax.xaxis.set_major_formatter(DateFormatter("%b %y"))
ax.yaxis.set_major_formatter(formatter)
ax.grid(False)
ax.legend().set_visible(False)
fig.autofmt_xdate()
locs, labels = plt.xticks()
plt.setp(labels, rotation=90)
return plt.show()
而 reporting_periods 可能 return
[datetime.datetime(2004, 12, 1, 0, 0), datetime.datetime(2005, 1, 1, 0, 0), datetime.datetime(2003, 12, 1, 0, 0), datetime.datetime(2004, 1, 1, 0, 0), datetime.datetime(2002, 12, 1, 0, 0), datetime.datetime(2003, 1, 1, 0, 0), datetime.datetime(2001, 12, 1, 0, 0), datetime.datetime(2002, 1, 1, 0, 0), datetime.datetime(2000, 12, 1, 0, 0), datetime.datetime(2001, 1, 1, 0, 0), datetime.datetime(1999, 12, 1, 0, 0), datetime.datetime(2000, 1, 1, 0, 0)]
这是结果图:
如何在 x 轴上以相同的间隔均匀分布日期?
一些示例数据:
suburb state house yrend median_price CHARNWOOD ACT H 31/01/91 0:00 91000 CHARNWOOD ACT H 28/02/91 0:00 90000 CHARNWOOD ACT H 31/03/91 0:00 92000 CHARNWOOD ACT H 30/04/91 0:00 92000 CHARNWOOD ACT H 31/05/91 0:00 92400 CHARNWOOD ACT H 30/06/91 0:00 94000 CHARNWOOD ACT H 31/07/91 0:00 95000 CHARNWOOD ACT H 31/08/91 0:00 95000 CHARNWOOD ACT H 30/09/91 0:00 96000 CHARNWOOD ACT H 31/10/91 0:00 97100 CHARNWOOD ACT H 30/11/91 0:00 98000 CHARNWOOD ACT H 31/12/91 0:00 98000 CHARNWOOD ACT H 31/01/92 0:00 103000 CHARNWOOD ACT H 29/02/92 0:00 105000 CHARNWOOD ACT H 31/03/92 0:00 106000 CHARNWOOD ACT H 30/04/92 0:00 109000 CHARNWOOD ACT H 31/05/92 0:00 110000 CHARNWOOD ACT H 30/06/92 0:00 113975 CHARNWOOD ACT H 31/07/92 0:00 117000 CHARNWOOD ACT H 31/08/92 0:00 118000 CHARNWOOD ACT H 30/09/92 0:00 119725 CHARNWOOD ACT H 31/10/92 0:00 120000 CHARNWOOD ACT H 30/11/92 0:00 123250 CHARNWOOD ACT H 31/12/92 0:00 123250 CHARNWOOD ACT H 31/01/93 0:00 123500 CHARNWOOD ACT H 28/02/93 0:00 123500 CHARNWOOD ACT H 31/03/93 0:00 123500 CHARNWOOD ACT H 30/04/93 0:00 125000 CHARNWOOD ACT H 31/05/93 0:00 123500 CHARNWOOD ACT H 30/06/93 0:00 123000 CHARNWOOD ACT H 31/07/93 0:00 120000 CHARNWOOD ACT H 31/08/93 0:00 120000 CHARNWOOD ACT H 30/09/93 0:00 120000 CHARNWOOD ACT H 31/10/93 0:00 120000 CHARNWOOD ACT H 30/11/93 0:00 118500 CHARNWOOD ACT H 31/12/93 0:00 118500 CHARNWOOD ACT H 31/01/94 0:00 118200 CHARNWOOD ACT H 28/02/94 0:00 119000 CHARNWOOD ACT H 31/03/94 0:00 118500 CHARNWOOD ACT H 30/04/94 0:00 118500 CHARNWOOD ACT H 31/05/94 0:00 118200 CHARNWOOD ACT H 30/06/94 0:00 119500 CHARNWOOD ACT H 31/07/94 0:00 119500 CHARNWOOD ACT H 31/08/94 0:00 119500 CHARNWOOD ACT H 30/09/94 0:00 118850 CHARNWOOD ACT H 31/10/94 0:00 119500 CHARNWOOD ACT H 30/11/94 0:00 116500 CHARNWOOD ACT H 31/12/94 0:00 116000 CHARNWOOD ACT H 31/01/95 0:00 115000 CHARNWOOD ACT H 28/02/95 0:00 112250 CHARNWOOD ACT H 31/03/95 0:00 110000 CHARNWOOD ACT H 30/04/95 0:00 110000 CHARNWOOD ACT H 31/05/95 0:00 109975 CHARNWOOD ACT H 30/06/95 0:00 106000 CHARNWOOD ACT H 31/07/95 0:00 106000 CHARNWOOD ACT H 31/08/95 0:00 106000 CHARNWOOD ACT H 30/09/95 0:00 104000 CHARNWOOD ACT H 31/10/95 0:00 103500 CHARNWOOD ACT H 30/11/95 0:00 101000 CHARNWOOD ACT H 31/12/95 0:00 101750 CHARNWOOD ACT H 31/01/96 0:00 102750 CHARNWOOD ACT H 29/02/96 0:00 103000 CHARNWOOD ACT H 31/03/96 0:00 100500 CHARNWOOD ACT H 30/04/96 0:00 100000 CHARNWOOD ACT H 31/05/96 0:00 99500 CHARNWOOD ACT H 30/06/96 0:00 98750 CHARNWOOD ACT H 31/07/96 0:00 96000 CHARNWOOD ACT H 31/08/96 0:00 97000 CHARNWOOD ACT H 30/09/96 0:00 98750 CHARNWOOD ACT H 31/10/96 0:00 98750 CHARNWOOD ACT H 30/11/96 0:00 100000 CHARNWOOD ACT H 31/12/96 0:00 98000 BELCONNEN ACT H 31/01/91 0:00 381000 BELCONNEN ACT H 28/02/91 0:00 382325 BELCONNEN ACT H 31/03/91 0:00 382000 BELCONNEN ACT H 30/04/91 0:00 385000 BELCONNEN ACT H 31/05/91 0:00 382650 BELCONNEN ACT H 30/06/91 0:00 381325 BELCONNEN ACT H 31/07/91 0:00 389000 BELCONNEN ACT H 31/08/91 0:00 388500 BELCONNEN ACT H 30/09/91 0:00 383825 BELCONNEN ACT H 31/10/91 0:00 381325 BELCONNEN ACT H 30/11/91 0:00 379000 BELCONNEN ACT H 31/12/91 0:00 374500 BELCONNEN ACT H 31/01/92 0:00 371000 BELCONNEN ACT H 29/02/92 0:00 371000 BELCONNEN ACT H 31/03/92 0:00 370700 BELCONNEN ACT H 30/04/92 0:00 370000 BELCONNEN ACT H 31/05/92 0:00 370200 BELCONNEN ACT H 30/06/92 0:00 370000 BELCONNEN ACT H 31/07/92 0:00 365000 BELCONNEN ACT H 31/08/92 0:00 370000 BELCONNEN ACT H 30/09/92 0:00 373750 BELCONNEN ACT H 31/10/92 0:00 375000 BELCONNEN ACT H 30/11/92 0:00 380000 BELCONNEN ACT H 31/12/92 0:00 381000 BELCONNEN ACT H 31/01/93 0:00 388000 BELCONNEN ACT H 28/02/93 0:00 384000 BELCONNEN ACT H 31/03/93 0:00 389000 BELCONNEN ACT H 30/04/93 0:00 395000 BELCONNEN ACT H 31/05/93 0:00 397500 BELCONNEN ACT H 30/06/93 0:00 400000 BELCONNEN ACT H 31/07/93 0:00 400000 BELCONNEN ACT H 31/08/93 0:00 397500 BELCONNEN ACT H 30/09/93 0:00 400800 BELCONNEN ACT H 31/10/93 0:00 405000 BELCONNEN ACT H 30/11/93 0:00 406500 BELCONNEN ACT H 31/12/93 0:00 122500 BELCONNEN ACT H 31/01/94 0:00 122000 BELCONNEN ACT H 28/02/94 0:00 125000 BELCONNEN ACT H 31/03/94 0:00 125000 BELCONNEN ACT H 30/04/94 0:00 125000 BELCONNEN ACT H 31/05/94 0:00 126750 BELCONNEN ACT H 30/06/94 0:00 129975 BELCONNEN ACT H 31/07/94 0:00 133725 BELCONNEN ACT H 31/08/94 0:00 137000 BELCONNEN ACT H 30/09/94 0:00 140000 BELCONNEN ACT H 31/10/94 0:00 142750 BELCONNEN ACT H 30/11/94 0:00 142750 BELCONNEN ACT H 31/12/94 0:00 149000 BELCONNEN ACT H 31/01/95 0:00 157000 BELCONNEN ACT H 28/02/95 0:00 160000 BELCONNEN ACT H 31/03/95 0:00 161875 BELCONNEN ACT H 30/04/95 0:00 165000 BELCONNEN ACT H 31/05/95 0:00 165000 BELCONNEN ACT H 30/06/95 0:00 171500 BELCONNEN ACT H 31/07/95 0:00 179000 BELCONNEN ACT H 31/08/95 0:00 185000 BELCONNEN ACT H 30/09/95 0:00 189950 BELCONNEN ACT H 31/10/95 0:00 195000 BELCONNEN ACT H 30/11/95 0:00 195500 BELCONNEN ACT H 31/12/95 0:00 198000 BELCONNEN ACT H 31/01/96 0:00 206000 BELCONNEN ACT H 29/02/96 0:00 210000 BELCONNEN ACT H 31/03/96 0:00 211500 BELCONNEN ACT H 30/04/96 0:00 219000 BELCONNEN ACT H 31/05/96 0:00 225000 BELCONNEN ACT H 30/06/96 0:00 234000 BELCONNEN ACT H 31/07/96 0:00 245000 BELCONNEN ACT H 31/08/96 0:00 245500 BELCONNEN ACT H 30/09/96 0:00 247000 BELCONNEN ACT H 31/10/96 0:00 248000 BELCONNEN ACT H 30/11/96 0:00 249500 BELCONNEN ACT H 31/12/96 0:00 248000 BRUCE ACT H 31/01/91 0:00 405900 BRUCE ACT H 28/02/91 0:00 405900 BRUCE ACT H 31/03/91 0:00 405900 BRUCE ACT H 30/04/91 0:00 405900 BRUCE ACT H 31/05/91 0:00 405900 BRUCE ACT H 30/06/91 0:00 405900 BRUCE ACT H 31/07/91 0:00 405900 BRUCE ACT H 31/08/91 0:00 405900 BRUCE ACT H 30/09/91 0:00 405900 BRUCE ACT H 31/10/91 0:00 405900 BRUCE ACT H 30/11/91 0:00 405900 BRUCE ACT H 31/12/91 0:00 405900 BRUCE ACT H 31/01/92 0:00 405900 BRUCE ACT H 29/02/92 0:00 405900 BRUCE ACT H 31/03/92 0:00 405900 BRUCE ACT H 30/04/92 0:00 405900 BRUCE ACT H 31/05/92 0:00 405900 BRUCE ACT H 30/06/92 0:00 405900 BRUCE ACT H 31/07/92 0:00 405900 BRUCE ACT H 31/08/92 0:00 405900 BRUCE ACT H 30/09/92 0:00 405900 BRUCE ACT H 31/10/92 0:00 405900 BRUCE ACT H 30/11/92 0:00 405900 BRUCE ACT H 31/12/92 0:00 405900 BRUCE ACT H 31/01/93 0:00 405900 BRUCE ACT H 28/02/93 0:00 405900 BRUCE ACT H 31/03/93 0:00 405900 BRUCE ACT H 30/04/93 0:00 405900 BRUCE ACT H 31/05/93 0:00 405900 BRUCE ACT H 30/06/93 0:00 405900 BRUCE ACT H 31/07/93 0:00 405900 BRUCE ACT H 31/08/93 0:00 405900 BRUCE ACT H 30/09/93 0:00 405900 BRUCE ACT H 31/10/93 0:00 405900 BRUCE ACT H 30/11/93 0:00 405900 BRUCE ACT H 31/12/93 0:00 405900 BRUCE ACT H 31/01/94 0:00 405900 BRUCE ACT H 28/02/94 0:00 405900 BRUCE ACT H 31/03/94 0:00 405900 BRUCE ACT H 30/04/94 0:00 339000 BRUCE ACT H 31/05/94 0:00 360000 BRUCE ACT H 30/06/94 0:00 377500 BRUCE ACT H 31/07/94 0:00 377500 BRUCE ACT H 31/08/94 0:00 377500 BRUCE ACT H 30/09/94 0:00 377500 BRUCE ACT H 31/10/94 0:00 360000 BRUCE ACT H 30/11/94 0:00 351000 BRUCE ACT H 31/12/94 0:00 351000 BRUCE ACT H 31/01/95 0:00 351000 BRUCE ACT H 28/02/95 0:00 351000 BRUCE ACT H 31/03/95 0:00 351000 BRUCE ACT H 30/04/95 0:00 351000 BRUCE ACT H 31/05/95 0:00 351000 BRUCE ACT H 30/06/95 0:00 351000 BRUCE ACT H 31/07/95 0:00 351000 BRUCE ACT H 31/08/95 0:00 351000 BRUCE ACT H 30/09/95 0:00 351000 BRUCE ACT H 31/10/95 0:00 351000 BRUCE ACT H 30/11/95 0:00 351000 BRUCE ACT H 31/12/95 0:00 351000 BRUCE ACT H 31/01/96 0:00 351000 BRUCE ACT H 29/02/96 0:00 351000 BRUCE ACT H 31/03/96 0:00 351000 BRUCE ACT H 30/04/96 0:00 351000 BRUCE ACT H 31/05/96 0:00 351000 BRUCE ACT H 30/06/96 0:00 351000 BRUCE ACT H 31/07/96 0:00 351000 BRUCE ACT H 31/08/96 0:00 302750 BRUCE ACT H 30/09/96 0:00 307750 BRUCE ACT H 31/10/96 0:00 312000 BRUCE ACT H 30/11/96 0:00 312000
import pandas as pd
from StringIO import StringIO
table = """suburb state house yrend median_price
CHARNWOOD ACT H 31/01/91 0:00 91000
CHARNWOOD ACT H 28/02/91 0:00 90000
...
BRUCE ACT H 30/11/96 0:00 312000
"""
table = table.replace("0:00", "")
sio = StringIO(table)
df = pd.read_table(sio, sep=r"\s+", parse_dates=['yrend'])
df = df.pivot(index="yrend", columns="suburb", values="median_price")
df.plot()
这里你真正需要的是用 pivot 重塑 http://pandas.pydata.org/pandas-docs/stable/reshaping.html。
编辑: 调整格式化程序,可能不完全是您需要的,但您明白了。要进行如此精细的定制,您必须求助于 matplotlib ...
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as dates
from matplotlib.ticker import FuncFormatter, NullFormatter
import pylab
from StringIO import StringIO
table = table.replace("0:00", "")
sio = StringIO(table)
df = pd.read_table(sio, sep=r"\s+", parse_dates=['yrend'])
df = df.pivot_table(index=["yrend"], columns=["state","suburb"], values=["median_price"])
fig, ax = plt.subplots()
# plot the lines
for col in df.columns:
ax.plot(df.index, df[col])
# tune the tickers
locator = dates.MonthLocator(range(1, 13), bymonthday=1, interval=6)
ax.xaxis.set_minor_locator(locator)
def _monthFmt(x, pos):
dt = pylab.num2date(x)
return dt.strftime('%Y') if dt.month == 2 else dt.strftime("%b")
formatter = FuncFormatter(_monthFmt)
ax.xaxis.set_minor_formatter(formatter)
# quiet major formatter - default the years
ax.xaxis.set_major_formatter(NullFormatter())
ax.xaxis.grid(True, which="minor")
ax.yaxis.grid()
plt.show()
除了使用 DateFormatter(就像你已经做的那样),我建议使用 DateLocator(在你的情况下 YearLocator 有意义)来定位刻度(而不是使用 [=11 手动定位它们=]):
ax.xaxis.set_major_locator(YearLocator())