Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python数据可视化 热力图

Python数据可视化 热力图

作者头像
叶庭云
修改于 2021-01-23 05:28:05
修改于 2021-01-23 05:28:05
7.1K0
举报
文章被收录于专栏:Python进阶之路Python进阶之路

不要停止奔跑,不要回顾来路,来路无可眷恋,值得期待的只有前方。——《马男波杰克》

文章目录

热力图:通过颜色深浅变化,优雅地展示数据的差异。

一、matplotlib绘制热力图

Matplotlib是Python著名的2D绘图库,该库仿造Matlab提供了一整套相似的绘图函数,用于绘图和绘表,是强大的数据可视化工具和做图库,且绘制出的图形美观。

测试数据来源https://www.tudinet.com/market-0-0-0-0/

代码如下:

代码语言:txt
AI代码解释
复制
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封装,从而使得作图更加容易,不需要经过大量的调整就能使你的图变得精致。

代码语言:txt
AI代码解释
复制
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

代码如下:

代码语言:txt
AI代码解释
复制
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/ 本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。 觉得文章对你有帮助、让你有所收获的话,期待你的点赞呀,不足之处,也可以在评论区多多指正。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/09/06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
数据可视化(19)-Seaborn系列 | 热力图heatmap()
案例代码已上传:Github https://github.com/Vambooo/SeabornCN
数据分析可视化
2019/10/02
3.9K0
数据可视化(19)-Seaborn系列 | 热力图heatmap()
Python 爬取链家成都二手房源信息 asyncio + aiohttp 异步爬虫实战
编辑 | JackTian 来源 | 杰哥的IT之旅(ID:Jake_Internet) 转载请联系授权(微信ID:Hc220066)
杰哥的IT之旅
2020/09/28
7970
Python 爬取链家成都二手房源信息 asyncio + aiohttp 异步爬虫实战
超实用,百行Python代码制作动态树地图
树地图(tree map)是一种适用于显示大量分层结构的数据,它是饼状图的一种高维度替代者,可以用面积直观显示各个部分的占比。
lyhue1991
2021/07/16
8730
超实用,百行Python代码制作动态树地图
超简单,百行Python代码制作动态条形图跳舞
打码不易,不想被白嫖,有需要完整代码和GDP数据集的同学,可以对本文点赞,在看,和分享后在公众号“算法美食屋”后台回复关键字:动态图,添加作者微信获取。感谢支持。? 先上图片: 再上视频: 最后上代
lyhue1991
2021/06/15
6370
【python】动态可视化+爬虫(超燃超简单)
这里推荐个动态可视化库pynimate,2023年还在持续更新中。调用他们动态可视化方法,实现起来不要太简单。
读书猿
2024/02/05
2000
【python】动态可视化+爬虫(超燃超简单)
Python数据分析实战(1) 成都土地市场分析
土地市场数据一般会公示在当地的公共资源交易中心,但经常会出现只公示当周或当月数据的情况,因此,我们得去找专业的土地网站获取交易数据。比如土流网:https://www.tudinet.com/market-0-0-0-0/
叶庭云
2020/09/17
1.1K0
Python数据分析实战(1)   成都土地市场分析
Python 数据可视化之密度散点图 Density Scatter Plot
密度散点图(Density Scatter Plot),也称为密度点图或核密度估计散点图,是一种数据可视化技术,主要用于展示大量数据点在二维平面上的分布情况。与传统散点图相比,它使用颜色或阴影来表示数据点的密度,从而更直观地展示数据的分布情况。密度散点图能更好地揭示数据的集中趋势和分布模式,尤其是在数据量非常大时,避免了散点图中点重叠导致的可视化混乱问题。
叶庭云
2024/05/25
2.7K0
Python 数据可视化之密度散点图 Density Scatter Plot
看了这个总结,其实 Matplotlib 可视化,也没那么难!
编辑 | JackTian 来源 | 杰哥的IT之旅(ID:Jake_Internet) 转载请联系授权(微信ID:Hc220066)
杰哥的IT之旅
2020/09/22
1.2K0
看了这个总结,其实 Matplotlib 可视化,也没那么难!
数据可视化|用斜率图进行对比分析
比如说,为了对比分析某产品不同功能的用户满意度,经过问卷调查和数据统计,得到下面这个调查结果:
代码医生工作室
2020/06/01
1.2K0
强烈推荐一个Python可视化模块,简单又好用
数据可视化动画还在用Excel做?现在一个简单的Python包就能分分钟搞定!而且生成的动画也足够丝滑,效果是酱紫的:
Python数据科学
2023/08/29
3920
强烈推荐一个Python可视化模块,简单又好用
Python数据分析--哑铃图
最近阅读学习了林骥老师的《数据化分析 Python 实战》,书中讲好的技能应该刻意的练习,而不是简单的重复。
MiaoGIS
2022/04/20
2.3K0
Python数据分析--哑铃图
数据可视化:用散点图进行数据分析
导读:散点图的用途有很多,我认为它的核心价值,在于应用相关思维,发现变量之间的关系。
IT阅读排行榜
2020/06/29
1.4K0
数据可视化:用散点图进行数据分析
python可视化 | 北京近一年来空气质量热力图,看看北京的沙尘暴真的多吗
记得早上起床,打开手机看到好多盆友发来的询问关怀“听说北京沙尘暴了,注意安全哦”,比心 ! 随后拉开窗帘,果然是漫天黄沙还伴随着大风,打开朋友圈满屏的银翼杀手、末日的关键字。
郭好奇同学
2021/03/25
1.4K0
python可视化 | 北京近一年来空气质量热力图,看看北京的沙尘暴真的多吗
Python数据抓取与可视化实战——网易云课堂人工智能与大数据板块课程实战
本篇内容数据抓取对象为网易云课堂人工智能与大数据板块课程信息,使用的工具是urllib+postman,因为直接构建的POST抓取的josn数据包,所以数据抓取的代码非常简单,没有繁杂的xpath或者css表达式。可视化部分使用matplotlib,感谢刘顺祥大神的matplotlib教程系列,让我没怎么费力气就直接复用了大量代码! https://mp.weixin.qq.com/s/E_r5ZsV9HOyuhnFwqsRXeA 以下是数据抓取部分代码: import json,time from url
数据小磨坊
2018/04/11
1.4K0
Python数据抓取与可视化实战——网易云课堂人工智能与大数据板块课程实战
4种更快更简单实现Python数据可视化的方法
数据可视化是数据科学或机器学习项目中十分重要的一环。通常,你需要在项目初期进行探索性的数据分析(EDA),从而对数据有一定的了解,而且创建可视化确实可以使分析的任务更清晰、更容易理解,特别是对于大规模的高维数据集。在项目接近尾声时,以一种清晰、简洁而引人注目的方式展示最终结果也是非常重要的,让你的受众(通常是非技术人员的客户)能够理解。
CDA数据分析师
2018/12/24
9450
网友需求系列01-Python-matplotlib定制化刻度(主副)绘制
今天我们开始「粉丝要求绘图系列」的第一篇推文 ,这个系列我会筛选出需求较多的一类图进行绘制讲解,当然,绘图的数据我们尽可能的全部分享出来(即使涉及一些论文数据,我们也会根据情况进行虚构处理的),本期的推文重要涉及的知识点如下:
DataCharm
2021/02/22
1.7K0
网友需求系列01-Python-matplotlib定制化刻度(主副)绘制
【Python可视化6】Seaborn之heatmap热力图
Seaborn是基于matplotlib的Python可视化库。它提供了一个高级界面来绘制有吸引力的统计图形。Seaborn其实是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,不需要经过大量的调整就能使你的图变得精致。
1480
2020/01/23
5.4K0
Pandas 高级教程——数据可视化
Pandas 提供了强大的数据可视化工具,可以帮助你更好地理解数据、发现模式和进行探索性数据分析。本篇博客将深入介绍 Pandas 中的数据可视化功能,并通过实例演示如何创建各种图表和图形。
Echo_Wish
2023/12/26
4540
超酷炫,百行Python代码制作动态曲线图
主要思路是设计plot_frame绘图函数绘制逐桢图片,然后用matplotlib.animation构建动画,如果有需要,还可以导出成gif和mp4。
lyhue1991
2021/06/15
1K0
NBA球员投篮数据可视化分析
作者:小F | 来源:法纳斯特 / 01 / 篮球场 从网上找的篮球场尺寸图,如下。 其中单位为英尺,NBA的球场尺寸为94英尺长,50英尺宽。 下图是我用CAD绘制半场尺寸图,本次绘图就是按照
Python数据科学
2019/07/12
2.1K0
NBA球员投篮数据可视化分析
推荐阅读
相关推荐
数据可视化(19)-Seaborn系列 | 热力图heatmap()
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档