Python:绘制具有两个相关日期列的时间序列数据
Python: plotting time series data with two dependent date columns
我是 Python 的新手,我已经在谷歌上搜索了大约一个小时,但似乎无处可去 - 以前有没有人遇到过这种问题并进行了管理告诉解决了吗?
我正在尝试绘制一个时间序列数据集,该数据集包含两个相关的日期字段中的 1 个指标。例如,A列是日期,B列是该日期内的时间片(顺序)
这是我的数据示例。
date period variable
2 2016-08-01 00:00 - 00:30 1
3 2016-08-01 00:30 - 01:00 2
4 2016-08-01 01:00 - 01:30 3
5 2016-08-01 01:30 - 02:00 4
6 2016-08-01 02:00 - 02:30 5
所以我希望我的 x 轴显示 A 列和 B 列的组合,并且在我的 y 轴上显示 C 列。
有什么想法吗?
我认为您必须将日期和期末结合起来作为时间戳,然后在散点图上绘制时间戳与您的值。
如果周期的持续时间对您很重要,那么您可以为每个观察创建两个数据点,即周期的开始和结束,并将它们与线段连接。这样您就不会丢失有关周期长度的信息。
最简单的解决方案当然取决于数据的来源。由于我们没有此信息,让我们从一些以字符串形式显示日期的列表开始。
import pandas as pd
import matplotlib.pyplot as plt
a = [["2016-08-01", "00:00 - 00:30",1],
["2016-08-01", "00:30 - 01:00",2],
["2016-08-01", "01:00 - 01:30",3],
["2016-08-01", "01:30 - 02:00",4],
["2016-08-01", "02:00 - 02:30",5]]
df = pd.DataFrame(a, columns=["date", "period", "variable"])
# split "period" column into start and stop
df['starttime'], df['stoptime'] = df['period'].str.split(' - ', 1).str
# create new column with date and starttime
df["datetime"] = pd.to_datetime(df['date'] + ' ' + df['starttime'])
#create new dataframe with datetime as index and variable as only column
df2 = df[["datetime","variable"]]
df2.set_index("datetime",inplace=True)
#plot step function
df2.plot(drawstyle="steps-post")
plt.tight_layout()
plt.show()
Matplotlib:
y 数据:
>>> var
[1, 2, 3, 4, 5]
制作文本标签
>>> labels
['2016-08-01#00:00 - 00:30', '2016-08-01#00:30 - 01:00','2016-08-01#01:00 - 01:30',
'2016-08-01#01:30 - 02:00', '2016-08-01#02:00 - 02:30']
为绘图创建 x 值
>>> x = list(range(len(labels)))
>>> x
[0, 1, 2, 3, 4]
绘制 x 和 y,为 x 刻度分配标签
from matplotlib import pyplot as plt
plt.plot(x, var)
plt.xticks(x, labels, rotation='vertical')
我是 Python 的新手,我已经在谷歌上搜索了大约一个小时,但似乎无处可去 - 以前有没有人遇到过这种问题并进行了管理告诉解决了吗?
我正在尝试绘制一个时间序列数据集,该数据集包含两个相关的日期字段中的 1 个指标。例如,A列是日期,B列是该日期内的时间片(顺序)
这是我的数据示例。
date period variable
2 2016-08-01 00:00 - 00:30 1
3 2016-08-01 00:30 - 01:00 2
4 2016-08-01 01:00 - 01:30 3
5 2016-08-01 01:30 - 02:00 4
6 2016-08-01 02:00 - 02:30 5
所以我希望我的 x 轴显示 A 列和 B 列的组合,并且在我的 y 轴上显示 C 列。
有什么想法吗?
我认为您必须将日期和期末结合起来作为时间戳,然后在散点图上绘制时间戳与您的值。
如果周期的持续时间对您很重要,那么您可以为每个观察创建两个数据点,即周期的开始和结束,并将它们与线段连接。这样您就不会丢失有关周期长度的信息。
最简单的解决方案当然取决于数据的来源。由于我们没有此信息,让我们从一些以字符串形式显示日期的列表开始。
import pandas as pd
import matplotlib.pyplot as plt
a = [["2016-08-01", "00:00 - 00:30",1],
["2016-08-01", "00:30 - 01:00",2],
["2016-08-01", "01:00 - 01:30",3],
["2016-08-01", "01:30 - 02:00",4],
["2016-08-01", "02:00 - 02:30",5]]
df = pd.DataFrame(a, columns=["date", "period", "variable"])
# split "period" column into start and stop
df['starttime'], df['stoptime'] = df['period'].str.split(' - ', 1).str
# create new column with date and starttime
df["datetime"] = pd.to_datetime(df['date'] + ' ' + df['starttime'])
#create new dataframe with datetime as index and variable as only column
df2 = df[["datetime","variable"]]
df2.set_index("datetime",inplace=True)
#plot step function
df2.plot(drawstyle="steps-post")
plt.tight_layout()
plt.show()
Matplotlib:
y 数据:
>>> var
[1, 2, 3, 4, 5]
制作文本标签
>>> labels
['2016-08-01#00:00 - 00:30', '2016-08-01#00:30 - 01:00','2016-08-01#01:00 - 01:30',
'2016-08-01#01:30 - 02:00', '2016-08-01#02:00 - 02:30']
为绘图创建 x 值
>>> x = list(range(len(labels)))
>>> x
[0, 1, 2, 3, 4]
绘制 x 和 y,为 x 刻度分配标签
from matplotlib import pyplot as plt
plt.plot(x, var)
plt.xticks(x, labels, rotation='vertical')