简体   繁体   中英

How can I plot two different spaced time series on one same plot in Python

I have two different spaced time series that I want to plot on one same graph.

Both of them are series between 12:30:00~1:25:00 but their time sequence are different: one is 5 seconds and the other is about 10.3 seconds. The type of both series is "pandas.core.series.Series". The type of the time index is string and made from strftime. For example, Series A would be:

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

and Series B would be:

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

I have tried to plot both of the series on one same plot by:

import matplotlib.pyplot as plt
A.plot()
B.plot()
plt.gcf().autofmt_xdate()
plt.show()

and it works like this:

在此输入图像描述

It is obvious that the blue lines in the first graph vanishes around 12:55:05 because series A has only half x points of B's and plot() only arrange the plot based on the order of x-axis, not the time interval.

It will be quite clear if I plot series A alone:

在此输入图像描述

What I want is to make the two series shown in one same plot and arranged based on the true time interval. Ideally, the plot should be similarly as:

在此输入图像描述

I hope I've made my point clear. If anything confusing, please let me know.

This is creating datetimes directly, not converting them to strings; you might want matplotlib.dates.datestr2num instead, depending on your original format. Then they get converted to matplotlib's datetime representation. This seems like a hassle but means the spacing will be correct for times.

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()

在此输入图像描述

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM