【100天精通Python】Day68:Python可视化_Matplotlib 绘制热力图,示例+代码

简介: 【100天精通Python】Day68:Python可视化_Matplotlib 绘制热力图,示例+代码

       Matplotlib 是一个Python数据可视化库,它提供了各种绘图工具和函数,用于创建多种类型的图表,包括热力图(Heatmap)。热力图是一种用颜色来表示数据值的分布和模式的可视化方式,通常用于研究数据的相关性、密度、趋势等。


1 Matplotlib绘制热力图步骤

导入库

在开始之前,需要导入必要的库,包括Matplotlib和NumPy。NumPy通常用于生成或处理数据。

import numpy as np
import matplotlib.pyplot as plt
  1. 准备数据
    在绘制热力图之前,需要准备数据。数据可以是二维数组或矩阵,其中每个元素表示某个位置的数值。
    data = np.random.rand(10, 10) # 示例数据,可以根据需求替换为你的数据
  2. 创建热力图

使用Matplotlib的imshow函数来创建热力图。你可以指定颜色映射(colormap),以及其他可选的参数,如图例、坐标轴标签等。

​plt.imshow(data, cmap='viridis')  # 使用'viridis'颜色映射,可以根据需求选择其他颜色映射
plt.colorbar()  # 添加颜色条
plt.title('Heatmap Example')
plt.xlabel('X Axis')
plt.ylabel('Y Axis')
  1. 4 显示热力图

          使用plt.show()函数来显示生成的热力图。

       这些步骤将生成一个基本的热力图,其中颜色表示数据值的大小和密度。你可以根据需要自定义图表的外观,例如调整颜色映射、添加注释、更改标签等

       此外,Matplotlib还提供了其他绘制热力图的方法,例如pcolormesh和imshow之外,你还可以使用heatmap等其他方法,以适应不同类型的数据和需求。


2 常用热力图类型

       值热力图(Value Heatmap):用不同的颜色和亮度表示数值的大小和密度。较高的数值通常以鲜艳和明亮的颜色表示,而较低的数值则以暗淡的颜色表示。

       密度热力图(Density Heatmap):用颜色强度表示数据点的集中程度和分布密度。较高的密度区域会显示为较深的颜色,较低的密度区域则显示为较浅的颜色。

       时间热力图(Time Heatmap):将时间作为一个维度,用颜色的强度表示特定时间段内的某种事件或指标的变化趋势。较高的值通常以深色显示,较低的值则以浅色显示。

       空间热力图(Spatial Heatmap):用颜色强度表示地理区域内的数据分布情况。可以按地理位置和对应的数值来绘制颜色强度的差异。

       渐变热力图(Gradient Heatmap):通过平滑过渡的颜色渐变来表示数值或密度的变化程度。使用渐变热力图可以更好地展示数据的变化趋势和分布情况。  


3 值热力图(Value Heatmap):

       值热力图通常用于表示数值大小和密度。较高的数值使用鲜艳的颜色,而较低的数值使用暗淡的颜色。

import numpy as np
import matplotlib.pyplot as plt
# 创建示例数据
data = np.random.rand(10, 10)  # 生成一个10x10的随机数据矩阵
# 创建值热力图
plt.imshow(data, cmap='YlOrRd', aspect='auto')  # 使用YlOrRd颜色映射
plt.colorbar()  # 添加颜色条
plt.title('Value Heatmap Example')
plt.xlabel('X Axis')
plt.ylabel('Y Axis')
plt.show()

在这个示例中,我们执行了以下步骤:

  1. 导入必要的库,包括 NumPy 和 Matplotlib。
  2. 创建一个随机的 10x10 数据矩阵,你可以用自己的数据替代这个示例数据。
  3. 使用 imshow 函数来显示值热力图。参数 cmap 用于选择颜色映射,这里使用了 'YlOrRd' 颜色映射,但你可以根据需要选择其他颜色映射。aspect='auto' 参数用于自动调整图像的纵横比以适应数据。
  4. 使用 colorbar() 函数添加颜色条,以便查看颜色与数值之间的对应关系。
  5. 添加标题、坐标轴标签等可选的图形元素。
  6. 最后,使用 show() 函数来显示热力图。

4 密度热力图(Density Heatmap)

通常用来表示数据点的集中程度和分布密度,较高的密度区域会显示为较深的颜色,而较低的密度区域则显示为较浅的颜色。以下是一个使用 Matplotlib 创建密度热力图的示例和代码:

import numpy as np
import matplotlib.pyplot as plt
# 创建示例数据
x = np.random.randn(1000)  # 随机生成1000个数据点
y = np.random.randn(1000)
# 创建密度热力图
plt.hist2d(x, y, bins=(50, 50), cmap='Blues')
plt.colorbar()  # 添加颜色条
plt.title('Density Heatmap Example')
plt.xlabel('X Axis')
plt.ylabel('Y Axis')
plt.show()

在这个示例中,我们执行了以下步骤:

  1. 导入必要的库,包括 NumPy 和 Matplotlib。
  2. 创建两个随机数据数组 xy,这些数据点将用于创建密度热力图。
  3. 使用 hist2d 函数来创建密度热力图。参数 xy 是数据点的坐标,bins 参数用于指定在 x 和 y 方向上的直方图箱的数量。颜色映射使用 'Blues',你可以选择其他颜色映射。
  4. 使用 colorbar() 函数添加颜色条,以便查看颜色与密度之间的对应关系。
  5. 添加标题、坐标轴标签等可选的图形元素。
  6. 最后,使用 show() 函数来显示密度热力图。

5 时间热力图(Time Heatmap):

时间热力图将时间作为一个维度,用颜色的强度表示特定时间段内的某种事件或指标的变化趋势。

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
# 创建示例数据
date_rng = pd.date_range(start='2023-01-01', end='2023-12-31', freq='D')
data = np.random.rand(len(date_rng), 24)  # 每天24小时的随机数据
# 创建时间热力图
plt.imshow(data, cmap='YlGnBu', aspect='auto')
plt.colorbar()  # 添加颜色条
plt.title('Time Heatmap Example')
plt.xlabel('Hour of the Day')
plt.ylabel('Date')
plt.show()

6 空间热力图(Spatial Heatmap)

通常用于表示地理区域内的数据分布情况,其中颜色的强度表示数据的集中程度。

在这里,展示如何使用 Matplotlib 创建一个基本的空间热力图示例,其中我们将使用随机生成的地理坐标和值来演示。

import numpy as np
import matplotlib.pyplot as plt
# 创建示例数据
np.random.seed(0)  # 设置随机种子以确保结果可重复
num_points = 100  # 生成100个数据点
latitude = np.random.uniform(37.0, 42.0, num_points)  # 随机生成纬度坐标
longitude = np.random.uniform(-120.0, -115.0, num_points)  # 随机生成经度坐标
values = np.random.uniform(0, 1, num_points)  # 为每个点生成随机值
# 创建空间热力图
plt.scatter(longitude, latitude, c=values, cmap='viridis', s=100)
plt.colorbar(label='Value')
plt.title('Spatial Heatmap Example')
plt.xlabel('Longitude')
plt.ylabel('Latitude')
plt.show()

在这个示例中,我们执行了以下步骤:

  1. 我们使用 NumPy 生成了100个随机的地理坐标点,包括纬度(latitude)和经度(longitude)坐标。
  2. 对于每个点,我们生成了一个随机的值(在0到1之间),这将用于表示数据点的强度。
  3. 使用 plt.scatter 函数绘制散点图,其中 c 参数表示颜色,我们使用 'viridis' 颜色映射来表示数据值的不同强度。
  4. 我们添加了颜色条(colorbar)以解释颜色与数值之间的关系。
  5. 添加标题和坐标轴标签以增强图形的可读性。

7 渐变热力图(Gradient Heatmap)

       渐变热力图(Gradient Heatmap)用平滑的颜色过渡来表示数值或密度的变化程度。

       以下是使用 Matplotlib 创建一个简单的渐变热力图示例,其中我们将使用 NumPy 生成一个二维的数值数据并将其可视化。

import numpy as np
import matplotlib.pyplot as plt
# 创建示例数据
x = np.linspace(0, 10, 100)
y = np.linspace(0, 10, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) + np.cos(Y)  # 这里使用一个简单的二维函数作为示例数据
# 创建渐变热力图
plt.contourf(X, Y, Z, cmap='coolwarm', levels=20)
plt.colorbar(label='Value')
plt.title('Gradient Heatmap Example')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()

在这个示例中,我们执行了以下步骤:

  1. 使用 NumPy 创建了一个网格点 (X, Y),其中 XY 分别是 xy 值的网格。
  2. 我们定义了一个简单的二维函数 Z,在这个示例中,我们使用了 sin(X) + cos(Y) 作为示例函数。
  3. 使用 plt.contourf 函数创建渐变热力图。我们使用 'coolwarm' 颜色映射来表示数值变化,levels 参数指定了渐变的级别数量。
  4. 我们添加了颜色条以解释颜色与数值之间的关系。
  5. 添加了标题和坐标轴标签以提高图形的可读性。

这个示例生成了一个渐变热力图,其中颜色的渐变表示数值的变化程度。你可以将示例数据替换为你自己的二维数据,以生成符合你需求的渐变热力图。


8 3D热力图

       通常使用密度分布来表示数据的三维分布。以下是一个使用Matplotlib创建3D密度热力图的示例,其中我们将使用NumPy生成数据并可视化它:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 创建示例数据
np.random.seed(0)
x = np.random.randn(1000)
y = np.random.randn(1000)
# 创建3D图形
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# 创建3D密度热力图
hist, xedges, yedges = np.histogram2d(x, y, bins=40)
xpos, ypos = np.meshgrid(xedges[:-1] + 0.25, yedges[:-1] + 0.25, indexing="ij")
xpos = xpos.ravel()
ypos = ypos.ravel()
zpos = 0
dx = dy = 0.5
dz = hist.ravel()
ax.bar3d(xpos, ypos, zpos, dx, dy, dz, cmap='viridis')
# 设置坐标轴标签
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Density')
# 显示图形
plt.show()

在这个示例中,我们执行了以下步骤:

  1. 我们使用NumPy生成了两个随机数据数组xy,共1000个数据点,这些数据点将用于创建3D密度热力图。
  2. 创建了一个包含3D子图的图形fig
  3. 使用histogram2d函数生成xy的二维直方图,将数据点分成40个箱子。
  4. 使用bar3d函数在3D子图中绘制3D密度热力图。我们使用'viridis'颜色映射来表示密度的变化。
  5. 设置了坐标轴标签。
  6. 最后,使用plt.show()函数来显示3D密度热力图。

这个示例生成了一个3D密度热力图,其中颜色深度表示数据点的密度分布。你可以将示例数据替换为自己的数据,以生成符合你需求的3D密度热力图。

目录
相关文章
|
14天前
|
开发框架 数据建模 中间件
Python中的装饰器:简化代码,增强功能
在Python的世界里,装饰器是那些静悄悄的幕后英雄。它们不张扬,却能默默地为函数或类增添强大的功能。本文将带你了解装饰器的魅力所在,从基础概念到实际应用,我们一步步揭开装饰器的神秘面纱。准备好了吗?让我们开始这段简洁而富有启发性的旅程吧!
25 6
|
7天前
|
数据可视化 Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
45 8
|
10天前
|
数据可视化 编译器 Python
Manim:数学可视化的强大工具 | python小知识
Manim(Manim Community Edition)是由3Blue1Brown的Grant Sanderson开发的数学动画引擎,专为数学和科学可视化设计。它结合了Python的灵活性与LaTeX的精确性,支持多领域的内容展示,能生成清晰、精确的数学动画,广泛应用于教育视频制作。安装简单,入门容易,适合教育工作者和编程爱好者使用。
65 7
|
12天前
|
Python
探索Python中的装饰器:简化代码,增强功能
在Python的世界里,装饰器就像是给函数穿上了一件神奇的外套,让它们拥有了超能力。本文将通过浅显易懂的语言和生动的比喻,带你了解装饰器的基本概念、使用方法以及它们如何让你的代码变得更加简洁高效。让我们一起揭开装饰器的神秘面纱,看看它是如何在不改变函数核心逻辑的情况下,为函数增添新功能的吧!
|
12天前
|
程序员 测试技术 数据安全/隐私保护
深入理解Python装饰器:提升代码重用与可读性
本文旨在为中高级Python开发者提供一份关于装饰器的深度解析。通过探讨装饰器的基本原理、类型以及在实际项目中的应用案例,帮助读者更好地理解并运用这一强大的语言特性。不同于常规摘要,本文将以一个实际的软件开发场景引入,逐步揭示装饰器如何优化代码结构,提高开发效率和代码质量。
38 6
|
13天前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
11天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
18天前
|
存储 索引 Python
Python编程数据结构的深入理解
深入理解 Python 中的数据结构是提高编程能力的重要途径。通过合理选择和使用数据结构,可以提高程序的效率和质量
131 59
|
12天前
|
小程序 开发者 Python
探索Python编程:从基础到实战
本文将引导你走进Python编程的世界,从基础语法开始,逐步深入到实战项目。我们将一起探讨如何在编程中发挥创意,解决问题,并分享一些实用的技巧和心得。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的参考。让我们一起开启Python编程的探索之旅吧!
36 10
|
15天前
|
机器学习/深度学习 人工智能 Java
Python 语言:强大、灵活与高效的编程之选
本文全面介绍了 Python 编程语言,涵盖其历史、特点、应用领域及核心概念。从 1989 年由 Guido van Rossum 创立至今,Python 凭借简洁的语法和强大的功能,成为数据科学、AI、Web 开发等领域的首选语言。文章还详细探讨了 Python 的语法基础、数据结构、面向对象编程等内容,旨在帮助读者深入了解并有效利用 Python 进行编程。