我想用python的matplotlib模塊製作一個通用的值 - 時間圖。我的時間在unix時間,但我希望他們以可讀的格式顯示在繪圖的x軸上。在matplotlib中繪製unix時間戳
我已閱讀關於使用日期時間對象進行繪圖的答案,但此方法似乎將小時/分鐘/秒信息和軌道時間戳刪除爲全天。有沒有辦法產生這些情節,並顯示更多的粒度標籤?
我想用python的matplotlib模塊製作一個通用的值 - 時間圖。我的時間在unix時間,但我希望他們以可讀的格式顯示在繪圖的x軸上。在matplotlib中繪製unix時間戳
我已閱讀關於使用日期時間對象進行繪圖的答案,但此方法似乎將小時/分鐘/秒信息和軌道時間戳刪除爲全天。有沒有辦法產生這些情節,並顯示更多的粒度標籤?
有可能將plt.plot(dates,values)
與dates
作爲datetime.datetime
對象的列表。情節將包括像'%Y-%m-%d'
這樣的格式的xticks,並且在您放大時會自動更改爲顯示小時,分鐘和秒鐘的格式。
但是,這聽起來像你想要更多的控制比這個。也許它不會顯示您希望的規模的小時,分鍾,秒。
在這種情況下,你可以建立自己的日期格式:
ax=plt.gca()
xfmt = md.DateFormatter('%Y-%m-%d %H:%M:%S')
ax.xaxis.set_major_formatter(xfmt)
不幸的是,如果你通過datetime.datetime
對象plt.plot
,由matplotlib自動選擇xticks似乎總是等於零秒。例如,如果運行
import matplotlib.pyplot as plt
import matplotlib.dates as md
import numpy as np
import datetime as dt
import time
n=20
duration=1000
now=time.mktime(time.localtime())
timestamps=np.linspace(now,now+duration,n)
dates=[dt.datetime.fromtimestamp(ts) for ts in timestamps]
values=np.sin((timestamps-now)/duration*2*np.pi)
plt.subplots_adjust(bottom=0.2)
plt.xticks(rotation=25)
ax=plt.gca()
xfmt = md.DateFormatter('%Y-%m-%d %H:%M:%S')
ax.xaxis.set_major_formatter(xfmt)
plt.plot(dates,values)
plt.show()
那麼你很好地格式化獲得日期,但所有的XTICK秒鐘均爲零。
那麼有什麼解決方案?
如果您自己轉換timestamps - > datetime.datetime對象 - > matplotlib datenums,並將datenums傳遞到plt.plot
,那麼秒數將被保留。
PS。 「matplotlib datenum」是指matplotlib.dates.date2num
返回的數字。
import matplotlib.pyplot as plt
import matplotlib.dates as md
import numpy as np
import datetime as dt
import time
n=20
duration=1000
now=time.mktime(time.localtime())
timestamps=np.linspace(now,now+duration,n)
dates=[dt.datetime.fromtimestamp(ts) for ts in timestamps]
datenums=md.date2num(dates)
values=np.sin((timestamps-now)/duration*2*np.pi)
plt.subplots_adjust(bottom=0.2)
plt.xticks(rotation=25)
ax=plt.gca()
xfmt = md.DateFormatter('%Y-%m-%d %H:%M:%S')
ax.xaxis.set_major_formatter(xfmt)
plt.plot(datenums,values)
plt.show()
Matplotlib肯定_doesn't_繪製日期時間刪除時的時間信息......究竟你在做什麼?你只是想改變軸的標籤?你只是想每個繪製的數據點一個勾號/標籤? – 2010-11-03 20:01:36