这篇文章主要介绍了Python如何绘制交通流折线图的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python如何绘制交通流折线图文章都会有所收获,下面我们一起来看看吧。
一、数据集下载
这里绘制PEMS04中的交通流量数据。该数据集中包含旧金山2018年1月1日至2月28日的29条道路上307个探测器每五分钟收集的数据。
二、折线图绘制
1、解压npz文件
npz是一种numpy文件存储的压缩格式,可使用numpy进行读取。
allow_pickle=True用于防止numpy版本过高带来的错误。
data.files查看压缩文件下的所有文件。
import numpy as npdata = 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 npimport matplotlib.pyplot as pltdata = 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 = 0for 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()
绘制结果如下:
关于“Python如何绘制交通流折线图”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Python如何绘制交通流折线图”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。