Matplotlib热力图的创意绘制指南【第54篇—python:Matplotlib热力图】

文章目录

  • Matplotlib热力图的创意绘制指南
      • 1. 简介
      • 2. 基本热力图
      • 3. 自定义颜色映射
      • 4. 添加注释
      • 5. 不同形状的热力图
      • 6. 分块热力图
      • 7. 多子图热力图
      • 8. 3D热力图
      • 9. 高级颜色映射与颜色栏设置
      • 10. 热力图的动态展示
      • 11. 热力图的交互性
      • 12. 标准化数据范围
      • 13. 导出热力图
    • 总结:

Matplotlib热力图的创意绘制指南

热力图在数据可视化中广泛应用,而Matplotlib作为Python中最流行的绘图库之一,提供了丰富的功能来创建各种炫酷的热力图。本文将深入探讨Matplotlib绘制不同类型热力图的参数,并通过实例演示它们的应用。

1. 简介

热力图是通过颜色映射展示矩阵数据的一种有效方式。Matplotlib的imshow函数是一个强大的工具,用于创建各种热力图。在开始实例之前,让我们先了解一下主要的参数:

  • data: 要绘制的矩阵数据。
  • cmap: 颜色映射,决定了热力图中颜色的分布。
  • interpolation: 插值方法,影响热力图的平滑度。
  • vmin和vmax: 指定颜色映射的最小和最大值。

2. 基本热力图

首先,我们来绘制一个基本的热力图,展示数据集的整体分布:

import matplotlib.pyplot as plt
import numpy as npdata = np.random.random((10, 10))  # 生成随机矩阵数据plt.imshow(data, cmap='viridis', interpolation='nearest')
plt.colorbar()plt.title('基本热力图')
plt.show()

这个简单的例子中,我们使用了viridis颜色映射和nearest插值方法。

image-20240204002238552

3. 自定义颜色映射

Matplotlib支持多种内置的颜色映射,但我们也可以自定义颜色映射,以使热力图更加个性化。以下是一个自定义颜色映射的例子:

custom_cmap = plt.cm.get_cmap('coolwarm', 5)  # 从'coolwarm'中选择5个颜色plt.imshow(data, cmap=custom_cmap, interpolation='bilinear')
plt.colorbar()plt.title('自定义颜色映射')
plt.show()

4. 添加注释

在热力图中添加注释可以更清晰地传达数据的含义。我们可以使用annotate函数在热力图上标注数值:

fig, ax = plt.subplots()
im = ax.imshow(data, cmap='plasma', interpolation='bicubic')for i in range(len(data)):for j in range(len(data[i])):text = ax.text(j, i, f'{data[i, j]:.2f}', ha='center', va='center', color='w')plt.colorbar(im)plt.title('带有注释的热力图')
plt.show()

5. 不同形状的热力图

Matplotlib还支持绘制不同形状的热力图,如圆形或椭圆形的点。以下是一个示例:

from matplotlib.patches import Ellipsefig, ax = plt.subplots()
im = ax.imshow(data, cmap='YlGnBu', interpolation='bicubic')# 添加椭圆形状的点
for i in range(len(data)):for j in range(len(data[i])):ellipse = Ellipse((j, i), 0.8, 0.8, edgecolor='w', facecolor='none')ax.add_patch(ellipse)plt.colorbar(im)plt.title('不同形状的热力图')
plt.show()

6. 分块热力图

有时候,我们希望突出显示矩阵中的某些块,以更加突出关键信息。我们可以通过使用imshowextent参数来实现这一目标:

fig, ax = plt.subplots()
block_data = np.random.random((5, 5))  # 生成块状数据ax.imshow(block_data, cmap='Reds', interpolation='nearest', extent=[2, 7, 2, 7])
plt.colorbar()plt.title('分块热力图')
plt.show()

image-20240204002304491

7. 多子图热力图

在某些情况下,我们可能需要在同一图中展示多个热力图,以进行比较或呈现不同方面的数据。这可以通过Matplotlib的subplot实现:

fig, axs = plt.subplots(1, 2, figsize=(10, 4))  # 一行两列的子图# 第一个子图
axs[0].imshow(data, cmap='Blues', interpolation='nearest')
axs[0].set_title('子图1')# 第二个子图
axs[1].imshow(data.T, cmap='Oranges', interpolation='bicubic')  # 转置数据以展示不同热力图
axs[1].set_title('子图2')plt.show()

8. 3D热力图

Matplotlib还支持绘制3D热力图,这对于展示具有三维结构的数据非常有用:

from mpl_toolkits.mplot3d import Axes3Dfig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection='3d')x, y = np.meshgrid(range(len(data)), range(len(data)))
ax.plot_surface(x, y, data, cmap='viridis')ax.set_title('3D热力图')
plt.show()

9. 高级颜色映射与颜色栏设置

Matplotlib允许进一步探索颜色映射和颜色栏的高级设置,以满足更复杂的需求。以下是一个演示自定义颜色栏和添加颜色栏标签的例子:

fig, ax = plt.subplots()
im = ax.imshow(data, cmap='coolwarm', interpolation='nearest')# 自定义颜色栏
cbar = plt.colorbar(im, ax=ax, fraction=0.046, pad=0.04)
cbar.set_label('数据值', rotation=270, labelpad=15)plt.title('高级颜色栏设置')
plt.show()

image-20240204002506344

10. 热力图的动态展示

有时,我们希望以动态方式展示数据的变化,这可以通过使用Matplotlib的FuncAnimation实现。以下是一个简单的动态热力图实例:

from matplotlib.animation import FuncAnimationfig, ax = plt.subplots()
data_frames = [np.random.random((10, 10)) for _ in range(10)]  # 生成多帧数据def update(frame):ax.clear()im = ax.imshow(data_frames[frame], cmap='Blues', interpolation='nearest')plt.title(f'动态热力图 - 帧 {frame}')ani = FuncAnimation(fig, update, frames=len(data_frames), interval=500, repeat=False)
plt.show()

11. 热力图的交互性

为了使热力图更具交互性,可以使用Matplotlib的imshow结合mplcursors库实现数据点的悬停显示:

import mplcursorsfig, ax = plt.subplots()
im = ax.imshow(data, cmap='Greens', interpolation='nearest')mplcursors.cursor(hover=True).connect("add", lambda sel: sel.annotation.set_text(f'{sel.artist.get_array()[sel.target.index]:.2f}'))plt.title('交互式热力图')
plt.show()

这样,当鼠标悬停在热力图的数据点上时,会显示相应的数值。

image-20240204002444309

12. 标准化数据范围

有时,为了更清晰地显示数据的差异,我们可能需要标准化数据范围。这可以通过Normalize类来实现:

from matplotlib.colors import Normalizenormalized_data = Normalize()(data)  # 将数据标准化fig, ax = plt.subplots()
im = ax.imshow(normalized_data, cmap='YlGnBu', interpolation='bicubic')
plt.colorbar(im, label='标准化值范围')plt.title('标准化热力图')
plt.show()

13. 导出热力图

最后,我们可以通过Matplotlib将绘制的热力图导出为图像文件,以便进一步使用或分享:

fig, ax = plt.subplots()
im = ax.imshow(data, cmap='coolwarm', interpolation='nearest')
plt.colorbar(im)plt.title('导出热力图')
plt.savefig('heatmap.png')

以上是一系列关于Matplotlib绘制不同种类炫酷热力图的示例和技巧。通过这些例子,我们深入了解了Matplotlib的强大功能,以及如何通过调整参数和应用不同的技巧,创建出丰富多彩、具有交互性和高级特性的热力图。希望这些实例对于您在数据可视化中的工作提供了有益的指导。

总结:

通过本文的介绍,我们深入探讨了Matplotlib库在绘制不同种类炫酷热力图时的多种技术和参数设置。以下是我们所学到的关键点:

  1. 基础知识: 我们了解了Matplotlib中绘制热力图的基本参数,如datacmapinterpolationvminvmax,这些参数对热力图的外观和可读性有着重要影响。

  2. 常见热力图类型: 通过实例,我们探讨了基本热力图、自定义颜色映射、注释、不同形状的热力图、分块热力图、多子图热力图、3D热力图等常见热力图类型的绘制方法。

  3. 高级设置: 我们学习了如何进行高级颜色映射与颜色栏设置,以及如何通过调整颜色栏标签、动态展示、交互性、标准化数据范围等技巧,使热力图更具个性和可读性。

  4. 实用技巧: 我们介绍了一些实用的技巧,如添加颜色栏、导出热力图为图像文件、热力图的交互显示等,以提高图表的可用性和可分享性。

通过这些实例,读者可以更加灵活地应用Matplotlib库绘制符合自身需求的炫酷热力图。无论是在数据科学、机器学习可视化,还是其他领域的数据分析中,Matplotlib都是一个强大的工具,通过调整参数和灵活运用不同的技巧,可以创建出引人注目的数据可视化效果。希望本文的内容对读者在使用Matplotlib时有所启发,促使更多创造性和有趣的数据可视化工作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/668094.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【从0上手Cornerstone3D】如何使用CornerstoneTools中的工具之工具介绍

简单介绍一下在Cornerstone中什么是工具,工具是一个未实例化的类,它至少实现了BaseTool接口。 如果我们想要在我们的代码中使用一个工具,则必须实现以下两个步骤: 使用Cornerstone的顶层addTool函数添加未实例化的工具 将工具添…

esp8266 步骤

安装驱动 http://arduino.esp8266.com/stable/package_esp8266com_index.json oled库 esp8266-oled-ssd1306

RabbitMQ 部署指南

RabbitMQ部署指南 1.单机部署 在Centos7虚拟机中使用Docker来安装。 1.1.下载镜像 方式一:在线拉取 docker pull rabbitmq:3.8-management方式二:从本地加载 加载镜像包: 上传到虚拟机中后,使用命令加载镜像即可&#xff1…

RNN(神经网络)

目录 介绍: 数据: 模型: 预测: 介绍: RNN,全称为循环神经网络(Recurrent Neural Network),是一种深度学习模型,它主要用于处理和分析序列数据。与传统…

uniapp /微信小程序 使用map组件实现手绘地图方案

获取地图范围 点图拾取坐标-地图开放平台|腾讯位置服务 获取需要手绘地图左下角和右上角GPS坐标 以北京故宫为例&#xff1a; 截取需要手绘地图进行手绘地图制作 ​​​​​​​​​​​​​​ 素材处理 由于地图素材文件比较大&#xff0c;小程序又限制包大小<2M,无…

Ps:文档窗口状态栏

状态栏 Status Bar位于每个文档窗口的底部&#xff0c;可显示诸如视图的缩放比例及文件相关的有用信息。 ◆ ◆ ◆ 缩放比例 显示当前视图的放大比例&#xff0c;例如 100% 表示实际大小。 有关视图的缩放&#xff0c;请参阅&#xff1a; 《Ps&#xff1a;缩放工具》 可以直接…

微信小程序 使用npm包

1. 微信小程序 使用npm包 1.1. npm初始化 如果你的小程序项目没有安装过npm包的话&#xff0c;你需要先初始化npm npm init1.2. 安装npm包 这里以vant-weapp(小程序UI组件库)为例&#xff1a; npm i vant-weapp -S --production1.3. npm包构建 1.3.1. 点击微信开发者工具右…

2024/2/4学习记录

微信小程序 网络数据请求 出于安全性方面的考虑&#xff0c;小程序官方对数据接口得请求做出了俩个限制 只能对 https 类型的接口必须将接口的域名添加到信任列表中 需要去这里设置 域名只支持 https 协议域名不能使用 ip 地址 或者localhost域名必须经过 ICP 备案 服务器域…

风险管理和采购管理核心考点梳理

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 PMP - 风险管理和采购管理核心考点梳理 风险管理 风险是一个中性词&#xff0c;包括机会和威胁。风险管理的子过程非常多&#xff0c;但是相对来说子过程之间的逻辑非常清晰&#xff0c;整个风险管理的过程都是在维…

Android BitmapShader setLocalMatrix缩放Bitmap高度重新onMeasure,Kotlin

Android BitmapShader setLocalMatrix缩放Bitmap高度重新onMeasure&#xff0c;Kotlin <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://sc…

OpenResty 安装

安装OpenResty 1.安装 首先你的Linux虚拟机必须联网 1&#xff09;安装开发库 首先要安装OpenResty的依赖开发库&#xff0c;执行命令&#xff1a; yum install -y pcre-devel openssl-devel gcc --skip-broken2&#xff09;安装OpenResty仓库 你可以在你的 CentOS 系统中…

docker常见操作

一、查看docker版本 docker version 二、查找docker镜像 docker search centos name&#xff1a;相关镜像的名称 description&#xff1a;镜像描述-尽量下载官方镜像 stars&#xff1a;星数 三、查看镜像 docker images 四、拉取镜像 docker pull 【image】 五、删除镜…

使用Nginx,后端服务器获取客户端IP地址

项目背景 多个客户端通过一个路由器访问在外部搭建的服务器&#xff1b;类似下图 目的 服务器获取客户端真实IP Nginx配置文件 location /api {proxy_pass http://198.1.1.127:8099/mark;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $pro…

软件价值6-扫雷游戏

扫雷是一种经典的单人电脑游戏&#xff0c;通常在矩形方格区域内进行。游戏规则简单明了&#xff1a; 1. 地雷布局 游戏开始时&#xff0c;玩家面对一个由未知格子组成的矩形区域。其中&#xff0c;一些格子下埋有地雷&#xff0c;而其他格子是安全的。 2. 目标 玩家的目标是…

【Android Gradle 插件】自定义 Gradle 插件模块 ⑤ ( 完整总结 )

一、创建自定义插件类型模块 ( Java or Kotlin Library ) 选择 " 菜单栏 / New / New Module… " 选项 , 在 " Create New Module " 对话框中 , 选择 创建 " Java or Kotlin Library " 类型的依赖库 ; 二、手动导入相关依赖 ( Java | Groovy | …

2 月 3 日算法练习-数论

简单数论 思路&#xff1a;各个相邻数的差值求最大公约数得到 d&#xff0c;然后就能求出最少项数。 c17用gcd&#xff0c;c11 用_gcd #include<bits/stdc.h> using namespace std; using ll long long; const int N 1e5 10; ll a[N]; int n; int main( ){cin>>…

vivado 综合、时序分析

以下综合 运行完成后&#xff0c;将打开Synthesis Completed对话框&#xff0c;如下所示图形 选择其中一个选项&#xff1a; •运行实施&#xff1a;启动当前实施项目的实施设置。 •打开综合设计&#xff1a;打开综合网表、活动约束集和将目标设备集成到综合设计环境中&…

spring boot3x登录开发-上(整合jwt)

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《spring boot实战》 &#x1f30a;山高路远&#xff0c;行路漫漫&#xff0c;终有归途。 目录 前置条件 jwt简介 导依赖 编写jwt工具类 1.配置项直接嵌入代码&#xff0c;通过类名.静态方法使用 2.配置项写到…

最短编辑距离问题与动态规划----LeetCode 72.编辑距离

动态规划&#xff08;Dynamic Programming, DP&#xff09;是解决复杂问题的一个强大工具&#xff0c;它将问题分解成更小的子问题&#xff0c;并使用这些子问题的解决方案来构建整体问题的解决方案。在深入探讨最短编辑距离问题之前&#xff0c;让我们先理解什么是动态规划&am…

让cgteamwork自动为Houdini载入相机,角色道具的abc文件

一 需求 最近接到个需求&#xff1a;在创建EFX文件时&#xff0c;自动加载动画出的缓存abc文件相机&#xff0c; 不用手动一个个的载入&#xff0c;还容易出错 ABC文件自动导入到Houndini里 二 过程/效果 在CGTeamwork里打开对应的镜头&#xff0c;下面的文件列表显示相机和角…