Python数据可视化 热力图
不要停止奔跑,不要回顾来路,来路无可眷恋,值得期待的只有前方。——《马男波杰克》
文章目录
热力图:通过颜色深浅变化,优雅地展示数据的差异。
一、matplotlib绘制热力图
Matplotlib是Python著名的2D绘图库,该库仿造Matlab提供了一整套相似的绘图函数,用于绘图和绘表,是强大的数据可视化工具和做图库,且绘制出的图形美观。
测试数据来源:https://www.tudinet.com/market-0-0-0-0/
代码如下:
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl
df = pd.read_excel('real_estate_info.xlsx')
area = df['土地位置']
# 成都主要 区 县 市 9区6县4市
with open('test.txt', encoding='utf-8') as f:
areas = f.read().split('、')
for item in areas:
# 每个行政区 对每行数据都进行判断
# 土地位置里包含行政区名 值为规划建筑面积 不包含 值为0
# 得到19列 以行政区为列名 其下面值为规划建筑面积
df[item] = [eval(df.loc[x, '规划建筑面积'][:-1]) if item in df.loc[x, '土地位置'] else 0 for x in range(len(df['土地位置']))]
date = df['推出时间'].str.split('年', expand=True)[0] # 这列的字符串 按年切割
df['年份'] = date # 添加新的一列 年份
df1 = df[areas]
df1.index = df['年份']
df2 = df1.groupby('年份').sum()
# print(df2.iloc[:5, ::]) # 2020年数据只有到2月的 舍去
# print(type(df2.iloc[:5, ::].T)) # 转置
datas = np.array(df2.iloc[:5, ::].T) # 19行 5列 二维数组
print(datas)
x_label = [year for year in range(2015, 2020)]
y_label = areas
mpl.rcParams['font.family'] = 'Kaiti' # 中文显示
fig, ax = plt.subplots(figsize=(15, 9)) # 绘图
heatmap = plt.pcolor(datas)
for y in range(datas.shape[0]):
for x in range(datas.shape[1]):
plt.text(x + 0.5, y + 0.5, '%.1f' % datas[y, x], # 热力图种每个格子添加文本 数据项设置
horizontalalignment='center', verticalalignment='center',
)
# x y轴刻度设置
plt.xticks(np.arange(0.5, 5.5, 1))
plt.yticks(np.arange(0.5, 19.5, 1))
# x y轴标签设置
ax.set_xticklabels(x_label)
ax.set_yticklabels(areas)
# title
ax.set_title(r'各行政区2015-2019年的总规划建筑面积(平方米)', fontsize=25, x=0.5, y=1.02)
# 隐藏边框
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['left'].set_visible(False)
ax.spines['bottom'].set_visible(False)
plt.savefig('heat_map.png')
# 热力图 展示
plt.colorbar(heatmap)
plt.show()
运行效果如下:
matplotlib绘制heatmap,该方法比较繁琐,要调用很多辅助函数才能实现效果更好的热图。
二、seaborn绘制热力图
Seaborn是基于matplotlib的Python可视化库。它提供了一个高级界面来绘制有吸引力的统计图形。Seaborn其实是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,不需要经过大量的调整就能使你的图变得精致。
seaborn.heatmap(data, vmin=None, vmax=None, cmap=None, center=None, robust=False,
annot=None, fmt=".2g", annot_kws=None,
linewidths=0, linecolor="white",
cbar=True, cbar_kws=None, cbar_ax=None,
square=False, xticklabels="auto", yticklabels="auto",
mask=None, ax=None, **kwargs):
- data:矩阵数据集,可以是numpy的数组(ndarray),也可以是pandas的DataFrame。如果是DataFrame,则df的index/column信息会对应到heatmap上,即df.index对应到热力图的x轴,df.columns对应到热力图的y轴
- vmax,vmin:分别是热力图的颜色取值最大和最小范围,默认是根据data数据表里的取值确定
- center:数据表取值有差异时,设置热力图的色彩中心对齐值;通过设置center值,可以调整生成的图像颜色的整体深浅
- robust:默认取值False;如果是True,且没设定vmin和vmax的值,热力图的颜色映射范围根据具有鲁棒性的分位数设定,而不是用极值设定
- annot(annotate的缩写):默认取值False;如果为True,在热力图每个方格写入对应的数据
- fmt:字符串格式代码,矩阵上标识数字的数据格式,比如保留小数点后几位数字
- annot_kws:默认取值False;如果是True,设置热力图矩阵上数字的大小颜色字体
- linewidths:定义热力图里表示两两特征关系的矩阵小块之间的间隔大小
- linecolor:切分热力图上每个矩阵小块的线的颜色,默认值是 white
- xticklabels,,yticklabels:xticklabels控制x轴标签的输出;yticklabels控制y轴标签的输出。默认值是auto,如果是True,则以DataFrame的index作为x轴标签、columns作为y轴的标签。如果是False,则不添加行标签名。如果是列表,则标签名改为列表中给的内容。如果是整数K,则在图上每隔K个标签进行一次标注。 如果是auto,则自动选择标签的标注间距,将标签名不重叠的部分(或全部)输出
- mask:控制某个矩阵块是否显示出来。默认值是None。如果是布尔型的DataFrame,则将DataFrame里True的位置用白色覆盖掉
- ax:设置作图的坐标轴,一般画多个子图时需要修改不同子图的该值
- **kwargs:All other keyword arguments are passed to ax.pcolormesh
- cbar:是否在热力图侧边绘制颜色刻度条,默认值是True
- cbar_kws:热力图侧边绘制颜色刻度条时,相关字体设置,默认值是None
- cbar_ax:热力图侧边绘制颜色刻度条时,刻度条位置设置,默认值是None
- cmap:从数字到色彩空间的映射
cmap:从数字到色彩空间的映射,改变cmap参数可以改变图的颜色,cmap有以下选择:
Accent, Accent_r, Blues, Blues_r, BrBG, BrBG_r, BuGn, BuGn_r, BuPu, BuPu_r, CMRmap, CMRmap_r, Dark2, Dark2_r, GnBu, GnBu_r, Greens,Greens_r, Greys, Greys_r, OrRd, OrRd_r, Oranges, Oranges_r, PRGn, PRGn_r, Paired, Paired_r, Pastel1, Pastel1_r, Pastel2, Pastel2_r, PiYG, PiYG_r, PuBu, PuBuGn, PuBuGn_r, PuBu_r, PuOr, PuOr_r, PuRd, PuRd_r, Purples, Purples_r, RdBu, RdBu_r, RdGy, RdGy_r, RdPu, RdPu_r, RdYlBu, RdYlBu_r, RdYlGn, RdYlGn_r, Reds, Reds_r, Set1, Set1_r, Set2, Set2_r, Set3, Set3_r, Spectral, Spectral_r, Wistia, Wistia_r, YlGn, YlGnBu, YlGnBu_r, YlGn_r, YlOrBr, YlOrBr_r, YlOrRd, YlOrRd_r, afmhot, afmhot_r, autumn, autumn_r, binary, binary_r, bone, bone_r, brg, brg_r, bwr, bwr_r, cividis, cividis_r, cool, cool_r, coolwarm, coolwarm_r, copper, copper_r, cubehelix, cubehelix_r, flag, flag_r, gist_earth, gist_earth_r, gist_gray, gist_gray_r, gist_heat, gist_heat_r, gist_ncar, gist_ncar_r, gist_rainbow, gist_rainbow_r, gist_stern, gist_stern_r, gist_yarg, gist_yarg_r, gnuplot, gnuplot2, gnuplot2_r, gnuplot_r, gray, gray_r, hot, hot_r, hsv, hsv_r, icefire, icefire_r, inferno, inferno_r, jet, jet_r, magma, magma_r, mako, mako_r, nipy_spectral, nipy_spectral_r, ocean, ocean_r, pink, pink_r, plasma, plasma_r, prism, prism_r, rainbow, rainbow_r, rocket, rocket_r, seismic, seismic_r, spring, spring_r, summer, summer_r, tab10, tab10_r, tab20, tab20_r, tab20b, tab20b_r, tab20c, tab20c_r, terrain, terrain_r, twilight, twilight_r, twilight_shifted, twilight_shifted_r, viridis, viridis_r, vlag, vlag_r, winter, winter_r
代码如下:
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
import pandas as pd
import matplotlib as mpl
df = pd.read_excel('real_estate_info.xlsx')
area = df['土地位置']
# 成都主要 区 县 市 9区6县4市
with open('test.txt', encoding='utf-8') as f:
areas = f.read().split('、')
for item in areas:
# 每个行政区 对每行数据都进行判断
# 土地位置里包含行政区名 值为规划建筑面积 不包含 值为0
# 得到19列 以行政区为列名 其下面为规划建筑面积
df[item] = [eval(df.loc[x, '规划建筑面积'][:-1]) if item in df.loc[x, '土地位置'] else 0 for x in range(len(df['土地位置']))]
date = df['推出时间'].str.split('年', expand=True)[0] # 这列的字符串 按年切割
df['年份'] = date # 添加新的一列 年份
df1 = df[areas]
df1.index = df['年份']
df2 = df1.groupby('年份').sum()
# print(df2.iloc[:5, ::]) # 2020年数据只有到2月的 舍去
# print(type(df2.iloc[:5, ::].T)) # 转置
datas = np.array(df2.iloc[:5, ::].T) # 19行 5列 二维数组
print(datas, type(datas))
x_label = [year for year in range(2015, 2020)]
y_label = areas
mpl.rcParams['font.family'] = 'Kaiti'
fig, ax = plt.subplots(figsize=(15, 9))
# 绘制热力图 cmap:从数字到色彩空间的映射
sns.heatmap(data=df2.iloc[:5, ::].T, linewidths=0.25,
linecolor='black', ax=ax, annot=True,
fmt='.1f', cmap='OrRd', robust=True,
)
# 添加描述信息 x y轴 title
ax.set_xlabel('年份', fontdict={'size': 18, 'weight': 'bold'})
ax.set_ylabel('行政区', fontdict={'size': 18, 'weight': 'bold'})
ax.set_title(r'各行政区2015-2019年的总规划建筑面积(平方米)', fontsize=25, x=0.5, y=1.02)
# 隐藏边框
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['left'].set_visible(False)
ax.spines['bottom'].set_visible(False)
# 保存 展示图片
plt.savefig('heat_map.png')
plt.show()
运行效果如下:
改变cmap参数,得到不同的效果:
作者:叶庭云 微信公众号:修炼Python CSDN:https://yetingyun.blog.csdn.net/ 本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。 觉得文章对你有帮助、让你有所收获的话,期待你的点赞呀,不足之处,也可以在评论区多多指正。
- 人工智能将取代人类?危机亦或是新的机遇
- 大数据驱动的未来网络:体系架构与应用场景(下)网络架构与场景详解
- 冷静点,NVIDIA 禁止 Geforce 进数据中心想限制的并不是深度学习
- 智能机器人崛起背后的中国力量
- 企业微服务架构转型-实施步骤
- Andrew Ng机器学习课程笔记--week2(多元线性回归&正规公式)
- 科技第六感:黑客控制你的车!不信?其实很简单
- python多版本的pip共存问题解决办法
- C++ 对vector进行排序
- 小程序优化36计
- 神经网络权重初始化问题
- Andrew Ng机器学习课程笔记--week11(图像识别&总结划重点)
- 市民近期到南沙有望体验到无人驾驶技术
- Andrew Ng机器学习课程笔记--week10(优化梯度下降)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Apache 解决80端口占用问题
- Centos7搭建主从DNS服务器的教程
- ubuntu 下JDK环境变量配置方法
- Linux部署msmtp+mutt发送邮件功能
- linux使用QQ实现网络邮件报警功能
- Linux初学(CnetOS7 Linux)之切换命令模式和图形模式的方法
- linux expect 自动登录交换机保存配置的方法
- CentOS7安装mysql5.7解压缩版简明教程
- Gunicorn Django部署配置方法
- Linux中使用NTP保持精确时间的方法详解
- LNMP环境下搭建yum的方法分析
- django 利用pillow 进行简单的设置验证码功能(python)
- Centos环境下安装Zend optimizer 3.3.9的方法
- Linux curl表单登录或提交与cookie使用详解
- Linux磁盘设备与LVM管理命令示例详解