网易首页 > 网易号 > 正文 申请入驻

使用matplotlib绘制热力图

0
分享至

一、什么是热力图?

热力图是一种通过对色块着色来显示数据的统计图表。绘图时,需指定颜色映射的规则。例如,较大的值由较深的颜色表示,较小的值由较浅的颜色表示;较大的值由偏暖的颜色表示,较小的值由较冷的颜色表示,等等。我们都知道,数学建模竞赛中,经常会用到图表的绘制。

从数据结构来划分,热力图一般分为两种。第一,表格型热力图,也称色块图。它需要 2 个分类字段和 1 个数值字段,分类字段确定 x、y 轴,将图表划分为规整的矩形块。数值字段决定了矩形块的颜色。第二,非表格型热力图,或曰平滑的热力图,它需要 3 个数值字段,可绘制在平行坐标系中(2个数值字段分别确定x、y轴,1个数值字段确定着色)。

热力图适合用于查看总体的情况、发现异常值、显示多个变量之间的差异,以及检测它们之间是否存在任何相关性。

二、热力图的绘制

下面我们就通过例子来讲述热力图的绘制,示例代码如下:

import matplotlib.pyplot as plt

import numpy as np

harvest = np.array([[0.8, 2.4, 2.5, 3.9, 0.0, 4.0, 0.0],

[2.4, 0.0, 4.0, 1.0, 2.7, 0.0, 0.0],

[1.1, 2.4, 0.8, 4.3, 1.9, 4.4, 0.0],

[0.6, 0.0, 0.3, 0.0, 3.1, 0.0, 0.0],

[0.7, 1.7, 0.6, 2.6, 2.2, 6.2, 0.0],

[1.3, 1.2, 0.0, 0.0, 0.0, 3.2, 5.1],

[0.1, 2.0, 0.0, 1.4, 0.0, 1.9, 6.3]])

plt.imshow(harvest)

plt.tight_layout()

plt.show()

在上面的代码中,将一个二维数组传入到 imshow 方法中便可以绘制一个热力图,每个色块的颜色代表数据的大小。代码执行后得到的图形如下图所示:

上面只是绘制了色块,并没有指明 x 轴 和 y 轴代表的含义,下面我们加上 x 轴和 y 轴的标签,并加上标题。示例代码如下:

import matplotlib.pyplot as plt

import numpy as np

vegetables = ["cucumber", "tomato", "lettuce", "asparagus",

"potato", "wheat", "barley"]

farmers = ["Farmer Joe", "Upland Bros.", "Smith Gardening",

"Agrifun", "Organiculture", "BioGoods Ltd.", "Cornylee Corp."]

harvest = np.array([[0.8, 2.4, 2.5, 3.9, 0.0, 4.0, 0.0],

[2.4, 0.0, 4.0, 1.0, 2.7, 0.0, 0.0],

[1.1, 2.4, 0.8, 4.3, 1.9, 4.4, 0.0],

[0.6, 0.0, 0.3, 0.0, 3.1, 0.0, 0.0],

[0.7, 1.7, 0.6, 2.6, 2.2, 6.2, 0.0],

[1.3, 1.2, 0.0, 0.0, 0.0, 3.2, 5.1],

[0.1, 2.0, 0.0, 1.4, 0.0, 1.9, 6.3]])

plt.xticks(np.arange(len(farmers)), labels=farmers,

rotation=45, rotation_mode="anchor", ha="right")

plt.yticks(np.arange(len(vegetables)), labels=vegetables)

plt.title("Harvest of local farmers (in tons/year)")

plt.imshow(harvest)

plt.tight_layout()

plt.show()

上面代码中,x 轴代表农场主的姓名,y 轴代表蔬菜的名称,二维数组中的数据代表某个农场主种的某类蔬菜的产量。代码执行后得到的图形如下图所示:

上图中,我们加上了 x 轴和 y 轴代表的含义以及整个图的标题,但是现在我们还不知道不同色块所对应的数值的大小,下面我们就来加上。示例代码如下:

import matplotlib.pyplot as plt

import numpy as np

vegetables = ["cucumber", "tomato", "lettuce", "asparagus",

"potato", "wheat", "barley"]

farmers = ["Farmer Joe", "Upland Bros.", "Smith Gardening",

"Agrifun", "Organiculture", "BioGoods Ltd.", "Cornylee Corp."]

harvest = np.array([[0.8, 2.4, 2.5, 3.9, 0.0, 4.0, 0.0],

[2.4, 0.0, 4.0, 1.0, 2.7, 0.0, 0.0],

[1.1, 2.4, 0.8, 4.3, 1.9, 4.4, 0.0],

[0.6, 0.0, 0.3, 0.0, 3.1, 0.0, 0.0],

[0.7, 1.7, 0.6, 2.6, 2.2, 6.2, 0.0],

[1.3, 1.2, 0.0, 0.0, 0.0, 3.2, 5.1],

[0.1, 2.0, 0.0, 1.4, 0.0, 1.9, 6.3]])

plt.xticks(np.arange(len(farmers)), labels=farmers,

rotation=45, rotation_mode="anchor", ha="right")

plt.yticks(np.arange(len(vegetables)), labels=vegetables)

plt.title("Harvest of local farmers (in tons/year)")

plt.imshow(harvest)

plt.colorbar()

plt.tight_layout()

plt.show()

上面的代码中,我们通过调用 colorbar 函数来加上数值和颜色的对应规则。代码执行后得到的图形如下图所示:

上图我们便加上了颜色和数值的对应规则。接下来我们再为每个色块加上所代表的数值。例如:

import matplotlib.pyplot as plt

import numpy as np

vegetables = ["cucumber", "tomato", "lettuce", "asparagus",

"potato", "wheat", "barley"]

farmers = ["Farmer Joe", "Upland Bros.", "Smith Gardening",

"Agrifun", "Organiculture", "BioGoods Ltd.", "Cornylee Corp."]

harvest = np.array([[0.8, 2.4, 2.5, 3.9, 0.0, 4.0, 0.0],

[2.4, 0.0, 4.0, 1.0, 2.7, 0.0, 0.0],

[1.1, 2.4, 0.8, 4.3, 1.9, 4.4, 0.0],

[0.6, 0.0, 0.3, 0.0, 3.1, 0.0, 0.0],

[0.7, 1.7, 0.6, 2.6, 2.2, 6.2, 0.0],

[1.3, 1.2, 0.0, 0.0, 0.0, 3.2, 5.1],

[0.1, 2.0, 0.0, 1.4, 0.0, 1.9, 6.3]])

plt.xticks(np.arange(len(farmers)), labels=farmers,

rotation=45, rotation_mode="anchor", ha="right")

plt.yticks(np.arange(len(vegetables)), labels=vegetables)

plt.title("Harvest of local farmers (in tons/year)")

for i in range(len(vegetables)):

for j in range(len(farmers)):

text = plt.text(j, i, harvest[i, j], ha="center", va="center", color="w")

plt.imshow(harvest)

plt.colorbar()

plt.tight_layout()

plt.show()

上面的代码中,我们通过一个循环来为每个色块加上对应的数值。代码执行后得到的图形如下图所示:

三、应用场景

1.适用场景

热力图的优势在于“空间利用率高”,可以容纳较为庞大的数据。热力图不仅有助于发现数据间的关系、找出极值,也常用于刻画数据的整体样貌,方便在数据集之间进行比较(例如将每个运动员的历年成绩都浓缩成一张热力图,再进行比较)。

如果将某行或某列设置为时间变量,热力图也可用于展示数据随时间的变化。例如,用热力图来反映一个城市一年中的温度变化,气候的冷暖走向,一目了然。

2.不适用场景

尽管热力图能够容纳较多的数据,但反过来说,人们很难将其中的色块转换为精确的数字。因此,当需要清楚知道数值的时候,可能需要额外的标注。

文章来源:csdn,mr_songw

2023年MCM/ICM美国大学生数学建模竞赛正在报名中

保研加分、综测评奖

由于报名参加美赛的同学不具备Visa或国际支付方式,以及缺乏一定的参赛经验,为了更好的提升参赛者的获奖率,数模乐园继续推出2023年美赛辅助报名及证书打印并邮寄的服务。 2022年 通过数模乐园辅助报名中, 4支 队伍斩获2021 Outstanding Winner奖(其中一支获得SIAM Award冠名奖;另外3支获得Outstanding Winner奖),O奖获奖率同比增长 50% ,整体参赛获奖率达99.3%, 2021年 助力1支队伍获得 1万美元 奖学金。数模乐园已累计为 10万 多人以上同学完成了美赛辅助报名服务!已成为 国内最大的美赛辅助报名平台!

竞赛报名

或复制下方报名官网进行报名:http://www.nmmcm.org.cn/match_detail/23

进群领取历年美赛真题及培训资料,进群备注:学校+专业

通过数模乐园报名完成后,数模乐园会在工作时间内将报名成功的邮件发送至参赛队伍的队长邮箱里,(和你报名时间顺序有关系,报名日期越早,收到的邮件就越早,所以很多同学一开始没有很强的备赛意识,表示不是很急,结果报名的比较晚,但是还特别想快速的收到报名成功的邮件,这里要告诫一下这类同学,越到最后,报名的队伍就越多,所以为了避免造成报名拥堵及邮件接收延迟问题,强烈建议同学们需要提前完成报名工作,每年这类问题经常会有发生)邮件中包含2023年美赛参赛指南、数模乐园赠送的备赛大礼包以及518密训课程等内容。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
一场0-4惨败!巴萨遭遇本赛季最大失利,国王杯半决赛:马竞大胜

一场0-4惨败!巴萨遭遇本赛季最大失利,国王杯半决赛:马竞大胜

足球评论qs
2026-02-13 06:27:17
陈道明戳破养老真相:所谓养老,不过是清醒时自渡,糊涂前自在

陈道明戳破养老真相:所谓养老,不过是清醒时自渡,糊涂前自在

青苹果sht
2026-01-20 05:51:45
NBA官方:狄龙领到第16次技犯被禁赛一场 损失薪水超12万美元

NBA官方:狄龙领到第16次技犯被禁赛一场 损失薪水超12万美元

罗说NBA
2026-02-13 06:06:13
李连杰称当年无数年轻人看完《少林寺》去学武,但百万分之一的机会才造就了一个王宝强

李连杰称当年无数年轻人看完《少林寺》去学武,但百万分之一的机会才造就了一个王宝强

极目新闻
2026-02-10 23:59:05
直降1500元!华为Mate新机突然降价:2月12日,正式官降!

直降1500元!华为Mate新机突然降价:2月12日,正式官降!

科技堡垒
2026-02-12 12:30:33
吃他汀猝死的人越来越多?医生苦劝:天冷吃他汀,必须多关注5点

吃他汀猝死的人越来越多?医生苦劝:天冷吃他汀,必须多关注5点

冷眼看世界728
2026-02-12 21:47:42
中国冬奥冠军,凭什么都是东北人?

中国冬奥冠军,凭什么都是东北人?

英国那些事儿
2026-02-12 04:56:10
董宇辉直播间的一句话火了:当孩子说“对不起,我没考好”时,我们该如何回复?

董宇辉直播间的一句话火了:当孩子说“对不起,我没考好”时,我们该如何回复?

窈窕妈妈
2026-02-12 04:30:33
郭碧婷一家新加坡过年,5岁女儿穿汉服正面像洋娃娃,向佐玩手机

郭碧婷一家新加坡过年,5岁女儿穿汉服正面像洋娃娃,向佐玩手机

古希腊掌管月桂的神
2026-02-12 22:57:11
圈粉无数!马刺处理索汉太体面,用行动诠释何为顶级豪门的担当

圈粉无数!马刺处理索汉太体面,用行动诠释何为顶级豪门的担当

夜白侃球
2026-02-12 20:47:43
喜讯!即将抵达河南!请市民做好准备!

喜讯!即将抵达河南!请市民做好准备!

河南交通广播1041
2026-02-12 20:42:17
重磅!吉林教育大调整,中考、升学、择校全变了!

重磅!吉林教育大调整,中考、升学、择校全变了!

王姐懒人家常菜
2026-02-12 18:48:19
西南航空引入SpaceX星链超快机上WiFi,年底覆盖超300架

西南航空引入SpaceX星链超快机上WiFi,年底覆盖超300架

不看车bukanche
2026-02-12 07:17:27
庄则栋走了,穆铁柱走了,聂卫平走了,体育界4大脊梁就剩他了

庄则栋走了,穆铁柱走了,聂卫平走了,体育界4大脊梁就剩他了

珺瑶婉史
2026-02-05 19:25:06
“你怎么知道我把李婷娶到了”,男子高速上偶遇一拉横幅的“孤独”婚车,多辆陌生车跟在后面陪跑成接亲车队

“你怎么知道我把李婷娶到了”,男子高速上偶遇一拉横幅的“孤独”婚车,多辆陌生车跟在后面陪跑成接亲车队

都市快报橙柿互动
2026-02-12 08:14:59
新春走基层 | 这位意大利女孩脱口而出“与中国合作就是与未来合作”

新春走基层 | 这位意大利女孩脱口而出“与中国合作就是与未来合作”

国际在线
2026-02-12 15:30:33
大妈家门口丢失30克金手镯,监控显示邻居捡走,对方:捡的是棍子

大妈家门口丢失30克金手镯,监控显示邻居捡走,对方:捡的是棍子

离离言几许
2026-02-12 17:00:12
大爆冷!足协杯亚军1比2输给中甲球队,新赛季-6分开局,保级悬了

大爆冷!足协杯亚军1比2输给中甲球队,新赛季-6分开局,保级悬了

罗掌柜体育
2026-02-12 12:44:47
广东一公园凌晨4点公放“恭喜发财”音乐,有市民在睡梦中被吵醒!公园:线路出现故障

广东一公园凌晨4点公放“恭喜发财”音乐,有市民在睡梦中被吵醒!公园:线路出现故障

广东吃喝玩乐
2026-02-12 12:06:24
律师:中国最高法院推翻加拿大涉毒男子死刑判决

律师:中国最高法院推翻加拿大涉毒男子死刑判决

俄罗斯卫星通讯社
2026-02-11 19:37:23
2026-02-13 06:36:49
数模乐园官方
数模乐园官方
专注于数学建模,分享干货知识
1237文章数 812关注度
往期回顾 全部

科技要闻

10倍速的一夜:三大模型春节前的暗战

头条要闻

钟南山:会用证据让全世界服气

头条要闻

钟南山:会用证据让全世界服气

体育要闻

31岁首次参加冬奥,10年前她是个水管工

娱乐要闻

《惊蛰无声》违规抢占排片遭影院控诉

财经要闻

“影子万科”如何掘金万科?

汽车要闻

开212 T01柴油版去穿越 连牧马人都跟不上

态度原创

教育
亲子
艺术
家居
军事航空

教育要闻

冲重点高中没有秘诀,只是多数人懒得坚持

亲子要闻

孩子最渴望听到父母说的五句话

艺术要闻

新中国第一座博物馆,馆藏书画都是国宝级绝世精品!

家居要闻

本真栖居 爱暖伴流年

军事要闻

美国新交付F35隐身战机没雷达

无障碍浏览 进入关怀版