我有一個csv文件,其中包含13年有關每天溫度的數據。現在我需要分散繪製這13年的數據。我希望x軸只有一年的日期(366天),以便每個日期的值可以顯示在同一日期,而不是一年。例如,August1st(87F)上的溫度可以顯示在同一個Y軸上,不管它在哪一年。這是如何工作的? 這就是數據的樣子:除了1980年,還有像1981年的其他年份也有8月1日。我希望他們的溫度在相同的y軸上 Python:如何根據日期將多年的數據分散繪製到一年中
回答
如果您在日期中使用strptime讀取日期時間。你可以日期轉換你一年中的哪一天
Convert Year/Month/Day to Day of Year in Python
def day_of_year(date_string):
return datetime.datetime.strptime(date_string, '%Y%m%d').timetuple().tm_yday
date_string = '19800801'
day_of_year(date_string)
>>> 214
哇,這有助於很多。我有另一個問題。我們如何設定第一天到9月30日,而不是默認的1月1日? –
正如你想的散點圖,一個方法是簡單地使用同一年從您的所有數據,並然後繪製中的所有條目說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()
給你的輸出:
嗨:當我做了這樣的事情:[datetime.strptime(d [4:],'%m%d')s,d,tmax,tmin in data [1:]],它會給我錯誤:每月超出範圍。爲什麼會發生?我應該如何避免這種情況? –
我認爲這是因爲1900年2月份沒有閏日,但我的數據有些年份是2月29日。那麼是否還有其他辦法可以在我的x軸中加入額外的一天,使其達到366天而不是365天?謝謝! –
在這種情況下,發現並保持一年,但隨後以閏年取代它。我已經更新了腳本。 –
- 1. 如何根據年份顯示日期?
- 2. 根據數據中的年份拆分日期列
- 3. 根據列中的日期將數據表分散到多個數據表中
- 4. 在Python中,我如何根據年份,週數和工作日得到日期?
- 5. 如何根據按年份分組的日期對數據進行排名?
- 6. PostgreSQL根據日期設置表年齡
- 7. 如何根據出生日期在Microsoft CRM 2011中計算年齡和年份
- 8. 如何根據價格繪製日期
- 9. 根據出生日期將MySQL結果分組到年齡組中
- 10. 如何選擇同一日期但前一年的數據
- 11. 如何根據日期,月份和年份比較Cakephp中的兩個日期
- 12. 根據加入日期計算員工的下一個3年週年紀念
- 13. 將日期時間拆分爲日期/年/月/日名稱和計數年份
- 14. 根據月份或年份拆分日期陣列
- 15. PHP日期;如何找到下一年?
- 16. 如何根據出生日期獲得年齡
- 17. 日期部分(年,...)與年度(...)
- 18. r - 地圖日期從多年到一年
- 19. Spark如何根據年份和月份劃分數據幀
- 20. 抽象的年份和日期到一個數據框
- 21. 識別一週中相同日期的年份(例如1994年,2005年,2011年)
- 22. 按python劃分數據的年份
- 23. 如何將一年中的所有日常數據轉換爲月度數據
- 24. 根據對象日期的年份將對象陣列拆分成新陣列
- 25. SQL:如何根據年份和日期編號獲取日期yyyy/mm/dd?
- 26. 如何根據使用熊貓的實際日期找到一年中的一天的數量?
- 27. 根據SQL和C#中的出生日期計算年齡?
- 28. 分裂的開始和結束日期在Python分開多年
- 29. 根據出生日期計算出年齡組內的年齡和地點
- 30. 的Python - 熊貓:構建日期一年,週週的年份和日期的
你可以轉換您可以追溯到一年的一天http://stackoverflow.com/questions/620305/convert-year-month-year-of-year-in-python –