由于您需要散点图,一种方法是简单地使用所有数据中的同一年,然后绘制 2016 年(闰年)天数范围内的所有条目。
要让开始范围在特定日期起作用,请使用一年中的某一天来确定分割点。
这可以按如下方式完成:
from matplotlib import pyplot, dates
from datetime import datetime
import itertools
data = [
["STATION", "DATE", "TMAX", "TMIN"],
["X", "19800801", "87", "66"],
["X", "19800801", "87", "72"],
["X", "19800802", "88", "64"],
["X", "19800802", "86", "68"],
["X", "19800803", "80", "67"],
["X", "19800804", "89", "63"],
["X", "19800804", "88", "68"],
["X", "19800805", "89", "72"],
["X", "19800805", "88", "67"],
["X", "19800806", "85", "66"],
# Some random data for 1984 (a leap year)
["X", "19840101", "77", "66"],
["X", "19840229", "77", "72"],
["X", "19840302", "78", "64"],
["X", "19840402", "76", "68"],
["X", "19840503", "73", "67"],
["X", "19840604", "79", "63"],
["X", "19840704", "78", "68"],
["X", "19840805", "79", "72"],
["X", "19840805", "78", "67"],
["X", "19841206", "75", "66"]]
# Date range to map data onto
d1 = datetime(year=2015, month=9, day=30)
d365 = datetime(year=2016, month=9, day=29)
yday = d1.timetuple().tm_yday # Start day of year
pyplot.xlim(dates.date2num(d1), dates.date2num(d365))
axis_lookup = {}
# Spread data over the selected range
for s, d, tmax, tmin in data[1:]:
dt = datetime.strptime(d, '%Y%m%d')
year = int(dt.year)
print(year)
if dt.timetuple().tm_yday < yday:
dt = dt.replace(year=d365.year)
else:
dt = dt.replace(year=d1.year)
axis_lookup[year] = axis_lookup.get(year,{'x':[],'y':[]})
axis_lookup[year]['x'].append(dt)
axis_lookup[year]['y'].append(tmax)
ax = pyplot.gca()
# Convert to maplotlib format
hfmt = dates.DateFormatter('%m')
ax.xaxis.set_major_formatter(hfmt)
ax.xaxis.set_major_locator(dates.MonthLocator())
colors = itertools.cycle(["r", "b", "g"])
pyplot.xlabel('Month')
pyplot.ylabel('Temperature')
for year,axes in axis_lookup.items():
xaxis = dates.date2num(axes['x'])
pyplot.scatter(xaxis, axes['y'],color=next(colors), label=year,)
pyplot.tight_layout()
pyplot.legend()
pyplot.show()
给你一个输出: