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

文章目录

    • 伪彩图
    • 等高线
    • colorbar

matplotlib教程:初步📈子图绘制📈坐标投影📈刻度设置📈共享坐标轴📈内容填充📈文字和字体

伪彩图

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

在这里插入图片描述

import matplotlib.pyplot as plt
import numpy as npx = 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.shapeif 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 pltfig = 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,不会发生变化,从而在图像绘制时保证了风格的统一。

在这里插入图片描述

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

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

相关文章

【市工信】2024年青岛市绿色工厂、绿色工业园区等绿色制造示范申报

科大睿智小编从青岛市工信局了解到&#xff0c;为深入贯彻绿色发展理念&#xff0c;牢固树立绿色低碳发展导向&#xff0c;进一步完善绿色制造体系&#xff0c;培育绿色制造先进典型&#xff0c;根据《工业和信息化部关于印发<绿色工厂梯度培育及管理暂行办法>的通知》&a…

win11安装nodejs

一、下载安装包 链接: https://pan.baidu.com/s/1_df8s1UlgNNaewWrWgI59A?pwdpsjm 提取码: psjm 二、安装步骤 1.双击安装包 2.Next> 3.勾选之后&#xff0c;Next> 4.点击Change&#xff0c;选择你要安装的路径&#xff0c;然后Next> 5.点击Install安装 二、…

Neo4j aura 官方网站快速入门新手教精读-从官方教程学习知识图谱

Neo4j 官方网站快速入门新手教精读 本文旨在为Neo4j新手提供一份全面的入门指南。除了基础的文本解释&#xff0c;我在里面还插入了每一步骤的详细截图或者自己画的图&#xff0c;从官方了解知识肯定比自己乱看要权威一些&#xff0c;有看不懂的不要纠结了解大概意思即可&#…

基于ssm游泳会员管理系统+vue论文

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统游泳会员信息管理难度大&#xff0c;容错率低&#xff0c…

MATLAB知识点:利用智能缩进整理代码

​讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 节选自​第4章&#xff1a;MATLAB程序流程控制 小技巧&#x…

桥接模式(Bridge Pattern) C++

上一节&#xff1a;适配器模式&#xff08;Adapter Pattern&#xff09; C 文章目录 0.理论1.组件2.使用场景 1.实践 0.理论 桥接模式&#xff08;Bridge Pattern&#xff09;是一种结构型设计模式&#xff0c;它的核心思想是将抽象部分与其实现部分分离&#xff0c;使它们可…

RISC-V特权架构 - 中断与异常概述

RISC-V特权架构 - 中断与异常概述 1 中断概述2 异常概述3 广义上的异常3.1 同步异常3.2 异步异常3.3 常见同步异常和异步异常 本文属于《 RISC-V指令集基础系列教程》之一&#xff0c;欢迎查看其它文章。 1 中断概述 中断&#xff08;Interrupt&#xff09;机制&#xff0c;即…

浅谈密码学

文章目录 每日一句正能量前言什么是密码学对称加密简述加密语法Kerckhoffs原则常用的加密算法现代密码学的原则威胁模型&#xff08;按强度增加的顺序&#xff09; 密码学的应用领域后记 每日一句正能量 人生在世&#xff0c;谁也不能做到让任何人都喜欢&#xff0c;所以没必要…

幻兽帕鲁服务器哪家便宜?阿里云腾讯云京东云华为云对比

幻兽帕鲁服务器哪家便宜&#xff1f;阿里云腾讯云京东云华为云对比&#xff0c;阿里云更便宜&#xff0c;26元1个月。游戏服务器租用多少钱一年&#xff1f;1个月游戏服务器费用多少&#xff1f;阿里云游戏服务器26元1个月、腾讯云游戏服务器32元&#xff0c;华为云26元&#x…

吸猫毛空气净化器哪个好?推荐除猫毛效果好宠物空气净化器品牌

当下有越来越多的家庭选择养宠物&#xff01;尽管家里变得更加温馨&#xff0c;但养宠可能会带来异味和空气中的毛发增多可能会带来健康问题&#xff0c;这是一个大问题&#xff01; 不想家里弥漫着异味&#xff0c;特别是来自宠物便便的味道&#xff0c;所以需要一款能够处理…

一张图读懂人工智能

一、生成人工智能的概念和应用&#xff0c;以及如何使用大型语言模型进行聊天和创造原创内容。这项技术将会对人类和企业产生深远影响。 计算机获得学习、思考和交流的能力&#xff0c;被称为生成人工智能。生成人工智能可以立即获得人类所有知识的总和&#xff0c;并回答任何…

pytest教程-13-conftest.py文件

上一小节我们学习了fixture的作用域&#xff0c;本小节我们学习一下pytest conftest.py文件的使用方法。 conftest.py文件的作用 conftest.py文件是pytest框架中的一个特殊文件&#xff0c;用于定义共享的设置、夹具(fixture)和钩子函数&#xff08;hook&#xff09;。 在py…

kali安装ARL灯塔(docker)

1、root身份进入容器 ┌──(root㉿Kali)-[~/桌面] └─# su root ┌──(root㉿Kali)-[~/桌面] └─# docker 2、先更新再克隆 ┌──(root㉿Kali)-[~/桌面] └─# apt-get update …

【STM32】江科大STM32学习笔记汇总(50)

00. 目录 文章目录 00. 目录01. STM32学习笔记汇总02. 相关资料下载03. 附录 01. STM32学习笔记汇总 【STM32】STM32学习笔记-课程简介(01) 【STM32】STM32学习笔记-STM32简介(02) 【STM32】STM32学习笔记-软件安装(03) 【STM32】STM32学习笔记-新建工程(04) 【STM32】STM…

React富文本编辑器开发(二)

我们接着上一节的示例内容&#xff0c;现在有如下需求&#xff0c;我们希望当我们按下某个按键时编辑器有所反应。这就需要我们对编辑器添加事件功能onKeyDown, 我们给 Editor添加事件&#xff1a; SDocor.jsx import { useState } from react; import { createEditor } from…

敏捷开发模型:一种灵活、协作和持续的软件开发方法

敏捷开发模型&#xff1a;一种灵活、协作和持续的软件开发方法 引言 在软件开发领域&#xff0c;随着市场需求的不断变化和技术的迅速发展&#xff0c;传统的瀑布模型逐渐暴露出其局限性。为了应对这些挑战&#xff0c;敏捷开发模型应运而生。敏捷开发模型强调灵活、协作和持…

软件无线电SDR加人工智能算法实现无人机频谱探测

通用软件无线电接收机作为传感器实时接收探测无线电信号&#xff0c;加上深度学习算法实现频谱识别&#xff0c;(https://img-blog.csdnimg.cn/5a6c4d89a047453a94f763f4e67aeb17.png)

Unity(第二十四部)UI

在游戏开发中&#xff0c;用户界面&#xff08;UI&#xff09;是至关重要的一部分。它负责与玩家进行交互&#xff0c;提供信息&#xff0c;并增强游戏的整体体验。Unity 提供了强大的工具和功能来创建和管理 UI。 ui的底层就是画布&#xff0c;创建画布的时候会同时创建一个事…

java中开源json处理库介绍

在Java生态系统中&#xff0c;有几个常用的开源库用于处理JSON数据。这些库各有特点&#xff0c;适用于不同的场景。下面我将介绍几个流行的Java JSON处理库&#xff0c;包括它们的基本情况、主要特点和核心API。 Jackson 基本情况 Jackson是一个流行的Java库&…

selenium爬虫

方法选择和安装包 在动态网页并且登陆过程中不需要进行过于复杂的密码验证的时候使用selenium会非常的方便 安装准备过程也相对简单&#xff1a; 下载对应版本的chromedriver并且通过如下代码找到路径下载到python所在的目录&#xff1a; import sysprint(sys.executable) …