matplotlib实现矩阵和图像的可视化表示

 更新时间:2024年03月05日 10:42:26   作者:微小冷  
这篇文章主要为大家详细介绍了如何利用matplotlib实现矩阵和图像的可视化表示,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解下

伪彩图

【plt】中提供了三种矩阵可视化函数,分别是imshow, matshow以及pcolormesh,相较之下,前两者比较相似,且imshow常被用做图片展示工具,所以matshoww这个函数基本没什么人知道,二者对比如下

在这里插入图片描述

import matplotlib.pyplot as plt
import numpy as np

x = np.random.rand(5,5)

fig,axes = plt.subplots(1,2,figsize=(8,4))

axes[0].imshow(x)
plt.title("imshow")
axes[1].matshow(x)
plt.title("matshow")

plt.tight_layout()
plt.show()

左右两图几乎没有区别,并且矩阵中每个元素都是严格的方形,即其长宽比并不会随着图窗的变化而发生变化。

相比之下,pcolormesh就灵活很多,图中的每个元素均为长宽比可变的矩形,如果和text互相配合,就可以更加完美地表现矩阵,做到下图的效果

在这里插入图片描述

代码如下

def drawMat(x, ax=None):
    M, N = x.shape
    if not ax:
        ax = plt.subplot()
    arrM, arrN = np.arange(M), np.arange(N)
    plt.yticks(arrM+0.5, arrM)
    plt.xticks(arrN+0.5, arrN)
    ax.pcolormesh(x)
    ax.invert_yaxis()
    for i,j in product(range(M),range(N)):
        ax.text(j+0.2, i+0.55, f"{x[i,j]:.2}")
    plt.show()

x = np.random.rand(5,5)
drawMat(x)

等高线

伪彩图可以通过颜色来标注矩阵中每个元素的大小,从而对矩阵元素的整体分布情况有一个大致的了解。而有时,我们希望更加清晰地了解矩阵元素的分层情况,这时可采用等高线图contour和contourf,与伪彩图相比,个中差别如下

在这里插入图片描述

X, Y = np.indices([100,100])/30 - 1.5
Z = (1 - X/2 + X**5 + Y**3) * np.exp(-X**2 - Y**2)

fDct = {"contour": plt.contour, "contourf":plt.contourf,
    "pcolormesh" : plt.pcolormesh, "imshow":plt.imshow}

fig = plt.figure(figsize=(9,6))
for i,key in enumerate(fDct, 1):
    ax = fig.add_subplot(2,2,i)
    fDct[key](Z)
    plt.title(key)

plt.tight_layout()
plt.show()

colorbar

伪彩图通过伪彩色来表现矩阵元素的大小,而colorbar则标注了为彩图中的颜色映射值,一般来说,在【plt】绘图时,每个子图都可以设置其自身的色条,

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
for i in range(2):
    ax = fig.add_subplot(2,1,i+1)
    ax = plt.pcolormesh(np.random.rand(10,20))
    plt.colorbar()

plt.show()

在这里插入图片描述

由于上下两张图采用了相同的伪彩映射,所以这两个色条有些重复了,为了让图像更加简洁,从而产生了一张图一个色条的需求。

下面新建一个坐标轴,以单独设置色条位置

fig = plt.figure()
for i in range(2):
    ax = fig.add_subplot(2,1,i+1)
    im = plt.pcolormesh(np.random.rand(10,20))
    plt.axis('off')

# 指定colorbar的位置和大小
cax = fig.add_axes([0.92, 0.1, 0.02, 0.8])
fig.colorbar(im, cax=cax)
plt.show()

效果如下

在这里插入图片描述

这种处理方法有一个问题,即colorbar所在坐标系将无法控制,如果使用tight_layout来进行紧凑布局,那么左侧的图像会忽视色条铺满整个区域。

为了让色条可以在布局中维持不变,可通过GridSpec来进一步定制布局网格,

fig = plt.figure()

gs = plt.GridSpec(2, 2, width_ratios=[15, 1], height_ratios=[1, 1])

plt.subplot(gs[0, 0])
plt.title("A")
im = plt.pcolormesh(np.random.rand(10,20))
plt.axis('off')

plt.subplot(gs[1, 0])
plt.title("B")
im = plt.pcolormesh(np.random.rand(10,20))
plt.axis('off')

ax = plt.subplot(gs[:, 1])
fig.colorbar(im, cax=ax)
plt.show()

其中,width_ratios为横向的单元格宽度比例,height_ratios为纵向的单元格高度比例。绘图结果如下,这样一来,无论布局如何发生变化,左侧图形与右侧色条的宽度比值均为15:1,不会发生变化,从而在图像绘制时保证了风格的统一。

在这里插入图片描述

以上就是matplotlib实现矩阵和图像的可视化表示的详细内容,更多关于matplotlib矩阵和图像可视化的资料请关注脚本之家其它相关文章!

相关文章

  • Python3爬虫里关于代理的设置总结

    Python3爬虫里关于代理的设置总结

    在本篇文章里小编给大家整理的是一篇关于Python3爬虫里关于代理的设置总结,需要的朋友们可以参考下。
    2020-07-07
  • python中文件变化监控示例(watchdog)

    python中文件变化监控示例(watchdog)

    这篇文章主要介绍了python中文件变化监控示例(watchdog),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • PyTorch中的神经网络 Mnist 分类任务

    PyTorch中的神经网络 Mnist 分类任务

    这篇文章主要介绍了PyTorch中的神经网络 Mnist 分类任务,在本次的分类任务当中,我们使用的数据集是 Mnist 数据集,这个数据集大家都比较熟悉,需要的朋友可以参考下
    2023-03-03
  • OpenCV实现对象跟踪的方法

    OpenCV实现对象跟踪的方法

    OpenCV 是一个很好的处理图像和视频的工具,本文主要介绍了OpenCV 进行对象跟踪,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • 使用Python3+PyQT5+Pyserial 实现简单的串口工具方法

    使用Python3+PyQT5+Pyserial 实现简单的串口工具方法

    今天小编就为大家分享一篇使用Python3+PyQT5+Pyserial 实现简单的串口工具方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02
  • 关于Python字典的底层实现原理

    关于Python字典的底层实现原理

    这篇文章主要介绍了关于Python字典的底层实现原理,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Python collections中的双向队列deque简单介绍详解

    Python collections中的双向队列deque简单介绍详解

    这篇文章主要介绍了Python collections中的双向队列deque简单介绍详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • Python3标准库之dbm UNIX键-值数据库问题

    Python3标准库之dbm UNIX键-值数据库问题

    dbm是面向DBM数据库的一个前端,DBM数据库使用简单的字符串值作为键来访问包含字符串的记录。这篇文章主要介绍了Python3标准库:dbm UNIX键-值数据库的相关知识,需要的朋友可以参考下
    2020-03-03
  • Python global全局变量函数详解

    Python global全局变量函数详解

    本文详解了global全局变量函数的用法,还有global的作用。global全局变量在一个脚本中全部作用域都可以访问,用法很方便,希望本文对大家有所帮助
    2018-09-09
  • Pandas中时间序列的处理大全

    Pandas中时间序列的处理大全

    这篇文章主要给大家介绍了关于Pandas中时间序列处理的相关资料,pandas 是基于NumPy 的一种工具,该工具是为解决数据分析任务而创建的,需要的朋友可以参考下
    2021-06-06

最新评论