作者:陈协莹隆心 | 来源:互联网 | 2023-07-19 05:52
热力图通过颜色的深浅来表示数据的分布。示例图中规定了颜色越浅则数值越大,那么我们可以一眼就分辨出数据的分布情况,非常方便。新建一个矩阵热力图根据矩阵绘制,所以在绘制热力图之前首
前言
提供的数据:数据
一、什么是热力图?
热力图通过颜色的深浅来表示数据的分布。
示例图中规定了颜色越浅则数值越大,那么我们可以一眼就分辨出数据的分布情况,非常方便。
二、绘制热力图
针对数据提出要求:绘制E地区4月份订单量的热力图,横轴以天为单位,纵轴以小时为单位
加载必要的包
import pandas as pd
import numpy as np
import seaborn as sns #绘制热力图使用
import matplotlib.pyplot as plt
加载数据
path='../data/数据.csv'
f=open(path)
data=pd.read_csv(f)
提取地点和时间
E_data=data[data['地点']=='E']
E_data['支付时间'] = pd.to_datetime(E_data['支付时间'])
month_data=E_data[E_data['支付时间'].dt.mOnth==4]
分组计算订单量
order_quantity_group=month_data.groupby([month_data['支付时间'].dt.day,month_data['支付时间'].dt.hour]).size()
以天和小时为分组依据分组,size()函数表示数据个数,即为订单量。结果如下:
由结果可以看出,索引中是我们给出的分组依据,分别是“支付时间的月份”和“小时”,格式是元组类型。
新建一个矩阵
热力图根据矩阵绘制,所以在绘制热力图之前首先把所求数据排列为合适的矩阵。
m=list(map(list,zip(*list(order_quantity_group.index)))) #分离元组,包含天和小时数据
#新建一个矩阵
new_array=np.zeros((30,24)) #30代表天数,24代表小时
for i,j in zip(m[0],m[1]): #m[0]是月份,m[1]是小时
new_array[i-1][j]=order_quantity_group[(i,j)]
绘制热力图
sns.heatmap(new_array.T, annot=True,xticklabels= range(1,32), yticklabels= True, cmap="YlGnBu") #绘制热力图。
plt.title('第4月订单量热力图') #加标题
plt.xlabel("日期") #X轴标签
plt.ylabel("小时") #Y轴标签
plt.show()
f.close()
sns.heatmap为绘制热力图函数。
第一个参数为矩阵数据,由于要求规定横轴是天,纵轴是小时,因此需要做一个转置。
annot参数代表是否在图形中显示数据,若为True,则显示数据,否则只显示颜色。
xticklabels和yticklabels是一组参数,如果为True,则绘制数据框的列名称。 如果为False,不会添加列名,如果列表类型数据,则将这些替代为x轴标签。
cmap可以设置颜色
由图可以看出,E地区销售量集中在中旬,且在一天当中集中在下午。
三、其它问题
参考