Python绘制交通流折线图详情
作者:居安_
这篇文章主要介绍了Python绘制交通流折线图详情,文章基于python的相关资料展开折线图绘制的实现流程,感兴趣的小伙伴可以参考一下
一、数据集下载
加州高速公路PEMS数据集
这里绘制PEMS04中的交通流量数据。该数据集中包含旧金山2018年1月1日至2月28日的29条道路上307个探测器每五分钟收集的数据。
二、折线图绘制
1、解压npz文件
npz是一种numpy文件存储的压缩格式,可使用numpy进行读取。
allow_pickle=True用于防止numpy版本过高带来的错误。
data.files查看压缩文件下的所有文件。
import numpy as np data = np.load(数据集存放地址, allow_pickle=True) print(data.files)
可以看到压缩文件下只有data一个文件:
通过 data['data'] 即可对该数据集进行读取。我们也可以查看一下该数据的维度。
print(data['data'].shape)
其维度如下:
16992 = 59天×24小时×12(每五分钟统计一次流量数据),307为探测器数量,3为特征数。
2、折线图绘制
数据中包含的三个特征为(交通流量,平均速度,平均占用率),取出绘图需要的第一个特征(这里只绘制其中一个探测器的)。
flow = data['data'][:, 0, 0]
导入matplotlib包,通过pyplot来绘制最简单的折线图。
import matplotlib.pyplot as plt
由于希望观测到工作日的流量变化,我们将横坐标替换为周一至周日。旧金山2018年1月1日为周一。
绘制的全部代码如下:
import numpy as np import matplotlib.pyplot as plt data = np.load(文件路径, allow_pickle=True) flow = data['data'][:, 0, 0] print(len(flow)) week = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'] x = [] for i in range(59): x.append(week[(i + 1) % 7]) y = [] sum = 0 for i in range(len(flow)): if i == 0 or (i + 1) % 288 != 0: sum += flow[i] else: y.append(sum) sum = 0 fig = plt.figure(figsize=(15, 5)) # 图片宽度设置的大一些 plt.title('traffic flow in San Francisco') plt.xlabel('day') plt.ylabel('flow') plt.xticks(np.arange(59), x) plt.plot(np.arange(59), y, linestyle='-') fig.autofmt_xdate(rotation=45) # x轴的刻度标签逆时针旋转45度 plt.show()
绘制结果如下:
文章所以大部分的KPI都会遵循“Mary's Peak”模式,比如说使用公共交通工具出行的情况、外卖点餐情况。从上图可以看出,这里的交通流量是遵循这一模式的。
到此这篇关于Python绘制交通流折线图详情的文章就介绍到这了,更多相关Python绘制折线图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!