問題描述
我想以特定的幾種方式在 x 軸上繪制日期,在 y 軸上繪制一天中的時間,然后繪制線圖或間隔(浮動條)圖.
I want to plot, in a specific few ways, dates on the x axis and time of day on the y axis, and then have either line plots or interval (floating bar) plots.
這個答案有幫助
但我與那個情節有一些不同,我無法讓它發揮作用.實際上,我正在獲取 y 軸來繪制日期和時間,因此當我只需要大約一天的時間時,它正在處理 y 軸上幾個月的時間戳.該示例在評論中聲稱,yaxis 的基準日期可以是任何東西,因為信息是及時的",但我不明白他是如何丟棄"基準日期信息的.
But I have a few differences from that plot and I can't get it to work. I'm actually getting the y axis to plot both the DATES as well as the time, so it is scrunching months' worth of timestamps on the y axis, when I just need about one day's worth. That example claims in the comments, "base date for yaxis can be anything, since information is in the time", but I don't understand how he is "throwing away" the base date information.
無論如何,我的需求是:
In any case, my needs are:
我希望 y 軸選擇 24 小時制(00:00 到 24:00)或上午/下午樣式時間,軸刻度看起來像下午 3:00,上午 11:00等.我猜這將使用 FuncFormatter 完成.
I'd like the option for either 24 hour time (00:00 to 24:00) or am/pm style time for the y axis, with the axis ticks looking like 3:00pm, 11:00am, etc. This will be done with a FuncFormatter, I guess.
對于間隔(時間范圍),我不想使用誤差線——線條太細了.我想使用(浮動)條形圖/柱形圖.
For the intervals (time ranges) I don't want to use the error bars--the lines are way too thin. I'd like to use a (floating) bar/column plot.
我的數據是格式為2010-12-20 05:00:00"的日期時間字符串
My data are datetime strings of the format '2010-12-20 05:00:00'
感謝您的幫助.
推薦答案
我認為您對 matplotlib 如何在幕后處理時間和日期感到有些困惑.
I think you're slightly confused as to exactly how matplotlib handles times and dates behind the scenes.
matplotlib 中的所有日期時間都表示為簡單的浮點數.1 天對應于 1.0 的差異,日期是自 1900 年以來的天數(如果我沒記錯的話,無論如何).
All datetimes in matplotlib are represented as simple floats. 1 day corresponds to a difference of 1.0, and the dates are in days since 1900 (if I remember correctly, anyway).
因此,為了僅繪制給定日期的時間,您需要使用 %1
.
So, in order to plot just the time of a given date, you need to use a % 1
.
我將使用積分,但您可以輕松使用條形.如果您確實使用 plt.bar
,請考慮使用 bottom
關鍵字參數,這樣條形的底部將從間隔的開始時間開始(并記住第二個參數是條形的 高度,而不是它的頂部 y 值).
I'm going to use points, but you can easily use bars. Look into using the bottom
keyword argument if you do use plt.bar
, so that the bottom of the bars will start at the start time of your intervals (and remember that the second argument is the height of the bar, not its top y-value).
例如:
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
import datetime as dt
# Make a series of events 1 day apart
x = mpl.dates.drange(dt.datetime(2009,10,1),
dt.datetime(2010,1,15),
dt.timedelta(days=1))
# Vary the datetimes so that they occur at random times
# Remember, 1.0 is equivalent to 1 day in this case...
x += np.random.random(x.size)
# We can extract the time by using a modulo 1, and adding an arbitrary base date
times = x % 1 + int(x[0]) # (The int is so the y-axis starts at midnight...)
# I'm just plotting points here, but you could just as easily use a bar.
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot_date(x, times, 'ro')
ax.yaxis_date()
fig.autofmt_xdate()
plt.show()
希望能有所幫助!
這篇關于在 matplotlib 中繪制一天中的時間與日期的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!