![](/img/trans.png)
[英]How to plot two time series data with different time frequency on same axis in python?
[英]How can I plot two different spaced time series on one same plot in Python
我有兩個不同的間隔時間序列,我想在同一個圖上繪制。
它們都是12:30:00~1:25:00之間的系列,但它們的時間順序不同:一個是5秒,另一個是大約10.3秒。 兩個系列的類型是“pandas.core.series.Series”。 時間索引的類型是字符串,由strftime構成。 例如,A系列將是:
12:30:05 0.176786
12:30:15 0.176786
12:30:26 0.176786
...
13:22:26 0.002395
13:22:37 0.002395
13:22:47 0.001574
和B系列將是:
12:30:05 0.140277
12:30:10 0.140277
12:30:15 0.140277
...
13:24:20 0.000642
13:24:25 0.000642
13:24:30 0.000454
我試圖通過以下方式在同一個圖上繪制這兩個系列:
import matplotlib.pyplot as plt
A.plot()
B.plot()
plt.gcf().autofmt_xdate()
plt.show()
它的工作原理如下:
很明顯,第一張圖中的藍線在12:55:05左右消失,因為系列A只有半個x點的B,而plot()只根據x軸的順序排列圖,而不是時間間隔。
如果我單獨繪制A系列,那將是非常清楚的:
我想要的是使兩個系列顯示在同一個圖中並根據真實的時間間隔排列。 理想情況下,情節應該類似於:
我希望我已經說清楚了。 如果有什么令人困惑的,請告訴我。
這是直接創建日期時間,而不是將它們轉換為字符串; 您可能需要matplotlib.dates.datestr2num
,具體取決於您的原始格式。 然后他們轉換為matplotlib的日期時間表示。 這似乎很麻煩,但意味着時間間隔是正確的。
import matplotlib.pyplot as plt
from matplotlib.dates import date2num , DateFormatter
import datetime as dt
# different times from the same timespan
TA = map(lambda x: date2num(dt.datetime(2015, 6, 15, 12, 1, x)),
range(1, 20, 5))
TB = map(lambda x: date2num(dt.datetime(2015, 6, 15, 12, 1, x)),
range(1, 20, 3))
A = [1.2, 1.1, 0.8, 0.66]
B = [1.3, 1.2, 0.7, 0.5, 0.45, 0.4, 0.3]
fig, ax = plt.subplots()
ax.plot_date(TA, A, 'b--')
ax.plot_date(TB, B, 'g:')
ax.xaxis.set_major_formatter(DateFormatter('%H:%M:%S'))
plt.show()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.