matplotlib常用功能汇总

news2025/4/13 7:09:52

文章目录

  • 1.IDE里的
    • 1.1 显示模式(plt.ion()和plt.ioff())
    • 1.2 backend说明
  • 2 jupyter里的
  • 3 通用的
    • 3.1 cmap
    • 3.2 subplot()相关
    • 3.3 绘制动态图(Animation类)
    • 3.4 matplotlib利用rcParams配置样式参数
  • 4. 与opencv连用
  • 可能遭遇的问题
    • 1. IDE不显示图像窗口

1.IDE里的

1.1 显示模式(plt.ion()和plt.ioff())

参考:matplotlib.org-Interactive figures

很有用的一点:
无论使用的是什么交互模式,都可以使用pyplot.show(block=True)来让图变成responsive的
来自chatGPT的回答:
“Responsive” 通常翻译为 “响应式的” 或者 “自适应的”。在计算机编程中, “响应式” 或 “自适应” 通常指程序可以根据不同设备屏幕大小或用户界面的变化自动进行调整,并且能够通过对用户输入和交互方式做出合理的回应。例如,网页设计中经常用到响应式布局,以使得页面在不同尺寸的屏幕上都能够展示得很好。

可以借用plt.ion()plt.ioff()来绘制一些动态效果,这两句英语很好的说明了这个显示模式:

If you wish to disable automatic redrawing of the plot:
plt.ioff()

If you wish to re-enable automatic redrawing of the plot:
plt.ion()
  • 一般很难看到动态效果是因为处理速度太快,在不同的(plt.figure()之间加一些plt.pause(0.5)这样的中断语句,就可以比较显著的看到变化了
  • 另外,这个东西使用比较少,目前可以想到的场景,先显示一条线,处理之后又显示一条线,分时显示在同一个图上。

参考:

  • matplotlib.pyplot.ion
  • Python中使用plt.ion()和plt.ioff()画动态图
  • 绘制五角星

1.2 backend说明

如果涉及到多种操作系统,比如macOS和Windows,可能要关注一下这个参数。

# 查看自己当前matplotlib的默认backend
import matplotlib as mpl
rc = mpl.rcParams
print(rc['backend'])
> MacOSX

# 如果想临时更换(代码只能改运行时),可以
import matplotlib
matplotlib.use("MacOSX")

关于mpl.rcParams,详见3.4 matplotlib利用rcParams配置样式参数

matplotlib已经支持的内建的backend有以下,详见The builtin backends
在这里插入图片描述

2 jupyter里的

3 通用的

3.1 cmap

其实基本用不到自定义cmap的功能,最多就是plt.show(XXX,'gray'),可能会想换个色谱。。目前没有找到很好的可以用程序就找到相应色谱的办法,还是看下面的参考链接吧:Choosing Colormaps in Matplotlib


我遇到了一个比较简单的需求,cmap显示CMYK配色,现有自带的cmap无法满足我的需求,因此自定义了一下,如下:

channels = ('c', 'm', 'y', 'k')

# 不那么好的cmap显示,使用默认近似的cmap达不到想要的效果
plt.figure("wrong CMYK")
for i, channel, colormap in zip(range(4), channels, ('Greens', 'RdPu', 'YlOrBr', 'gray')):
    plt.subplot(2, 2, i+1)
    plt.title(channel+" channel")
    plt.imshow(np.asarray(CMYK[:,:,i]), cmap=colormap)

# 正确的CMYK显示
plt.figure("right CMYK")
cyan_cmap = ListedColormap(["black", "cyan"])
magenta_cmap = ListedColormap(["black", "magenta"])
yellow_cmap=ListedColormap(["black", "yellow"])

plt.subplot(2, 2, 1)
plt.title("cyan")
plt.imshow(np.asarray(CMYK[:,:,0]), cmap=cyan_cmap)

plt.subplot(2, 2, 2)
plt.title("magenta")
plt.imshow(np.asarray(CMYK[:,:,1]), cmap=magenta_cmap)

plt.subplot(2, 2, 3)
plt.title("yellow")
plt.imshow(np.asarray(CMYK[:,:,2]), cmap=yellow_cmap)

plt.subplot(2, 2, 4)
plt.title("black")
plt.imshow(np.asarray(CMYK[:,:,3]), cmap="gray")

原图是这样:
在这里插入图片描述

呈现效果如下:
在这里插入图片描述
IDE的这个显示框可以进行ZOOM,
在这里插入图片描述

主要参考:

  • ✅matplotlib-Creating listed colormaps
  • ✅matplotlibList of named colors
  • Creating a colormap from a list of colors

3.2 subplot()相关

例如:

# Initialize the grid
grid = plt.GridSpec(2, 3, wspace=0.4, hspace=0.3)
# make subplots
plt.subplot(grid[0, 0])
plt.subplot(grid[0, 1:])
plt.subplot(grid[1, :2])
plt.subplot(grid[1, 2]);

在这里插入图片描述
我实际使用的例子:

olors=("b","g","r") #opencv的默认三通道顺序

plt.figure("histograms")

grid = plt.GridSpec(2, 3, wspace=0.4, hspace=0.3)
plt.subplot(grid[0, 0:])
plt.title("src Image")
plt.imshow(srcImg[:, :, [2, 1, 0]])

for i,color in enumerate(colors):
    hist = cv2.calcHist([srcImg],[i],None,[256],[0,255])
    plt.subplot(grid[1, i])
    plt.title(color+" channel")
    plt.plot(hist,color)
    plt.xlim([0,256])
plt.show(block=True)

在这里插入图片描述

参考:

  • https://www.machinelearningplus.com/plots/subplots-python-matplotlib/
  • 使用 GridSpec 自定义子图位置
  • Using Gridspec to make multi-column/row subplot layouts

3.3 绘制动态图(Animation类)

参考:

  • 3.6. softmax回归的从零开始实现中class Animator:
  • stackoverflow:How to animate a scatter plot
  • matplotlib-Animated scatter saved as GIF

3.4 matplotlib利用rcParams配置样式参数

参考:Customizing Matplotlib with style sheets and rcParams

在程序中利用rcParams进行样式修改,只能是运行时生效。如果想永久生效的话,需要去修改matplotlibrc文件

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
from cycler import cycler
mpl.rcParams['lines.linewidth'] = 2
mpl.rcParams['lines.linestyle'] = '--'
data = np.random.randn(50)
plt.plot(data)

关于mpl.rcParams支持的参数,可以

  1. 查看文档:class matplotlib.RcParams(*args, **kwargs)
  2. 程序里可以
import matplotlib
doc(matplotlib.RcParams)
  1. 程序里直接打印配置项和对应当前的默认值:
import matplotlib as mpl
rc = mpl.rcParams
for key,value in rc.items():
    print(key,value)
# 会有很多项
> .....
axes.prop_cycle cycler('color', ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf'])
axes.spines.bottom True
axes.spines.left True
axes.spines.right True
axes.spines.top True
....
  1. 直接去看matplotlibrc文件,或者可以看看网页上默认的matplotlibrc,如果想查看本地的,可以使用以下代码获取改文件在系统里的位置
import matplotlib
matplotlib.matplotlib_fname()
> /Users/yourname/Documents/software/miniconda3/miniconda3/envs/py37/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc

4. 与opencv连用

可能遭遇的问题

1. IDE不显示图像窗口

现象描述

代码类似下面这样:

zipImg = cv2.imread(zipImgPath)
plt.ion()
plt.figure()
plt.imshow(zipImg[:, :, [2, 1, 0]])

但是运行后没有出现图像窗口。

可能的原因及解决方案,参考:Matplotlib plots not showing up in Mac OSX?

  1. backend问题,后端可以理解为渲染图像的引擎,对于macos电脑来说,可能是因为backend设置不对造成的,这部分介绍,详见上面1.1.2 backend说明
  2. 窗口其实显示了,只是一闪而过了,可以在plt.imshow()代码的后面添加plt.pause(20)或者 time.sleep(20)来暂停程序执行一段时间,这样就可以看见窗口了。

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

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

相关文章

MySQL_8 相当牛逼的索引机制

目录 一、索引机制的引入 1.索引机制🐂B在哪里? 2.索引机制提高查询速度的原理 : 二、索引的创建 1.索引分类 : 2.使用格式 : 3.代码演示 : 三、索引的删除 1.格式 : 2.演示 : 四、索引的查询 1.格式 : 2.演示 : 五、索引的使用规则 一、索…

Linux---强制停止、退出登出、history、yum

1. ctrl c 强制停止 Linux某些程序的运行,如果想要强制停止它,可以使用快捷键ctrl c: [shaonianlocalhost ~]$ tail ^C [shaonianlocalhost ~]$ 命令输入错误,也可以通过快捷键ctrl c,退出当前输入,重…

如何在 Alpine Linux 上启用或禁用防火墙?

防火墙是计算机网络安全的重要组成部分,它用于保护计算机和网络免受未经授权的访问和恶意攻击。Alpine Linux 是一种轻量级的 Linux 发行版,常用于构建容器化应用和嵌入式系统。本文将详细介绍如何在 Alpine Linux 上启用或禁用防火墙。步骤 1&#xff1…

MySQL复习

文章目录 1、操作数据库1.1、操作数据库1.2、数据库的数据类型1.3、数据库的字段属性1.4、创建数据表1.5、MyISAM和InnoDB1.6、修改删除表 2、MySQL数据管理2.1、外键2.2、DML语言(全部记住)2.3、添加2.4、修改2.5、删除 3、DQL查询数据3.1、DQL3.2、查询…

EMPIRE: LUPINONE实战演练

文章目录 EMPIRE: LUPINONE实战演练一、前期准备1、相关信息 二、信息收集1、端口扫描2、访问网站3、查看源码4、dirsearch扫描目录5、访问robots文件6、访问myfiles文件7、模糊测试8、访问秘密文件9、查找秘钥10、查看秘钥11、解码12、解密13、远程连接 三、提权1、查找flag2、…

Unity---委托与事件

目录 1.委托和事件在使用上的区别是什么? 2. delegate委托 2.1示意图 2.2 DelegetTest.cs 2.3 Deleget_A.cs 2.4 Deleget_B.cs 2.5 运行unity. 点击按键 A 2.6 点击按键 B 3.Event 事件 3.1单个通知 3.1.1示意图 3.1.2 Event_Test.cs 3.1.3 Event_A.cs 3…

专家警告AI可能会导致人类灭绝

人工智能可能导致人类灭绝,包括 OpenAI 和 Google Deepmind 负责人在内的专家警告说 数十人支持在人工智能安全中心 的网页上发表的声明。 它写道:“减轻人工智能灭绝的风险应该与其他社会规模的风险(如流行病和核战争)一起成为全…

Spring(二)获取bean和依赖注入

一、获取bean的三种方式: 1.根据bean的id获取: Student studentOne (Student) ioc.getBean("studentOne"); 2.获取bean所需要的类型的class对象: Student student ioc.getBean(Student.class); 我们运行之后如下所示&#xff1…

为kong网关添加限流插件

限流用于控制发送到上游服务的请求速率。 它可用于防止 DoS 攻击、限制网络抓取和其他形式的过度使用。 如果没有速率限制,客户可以无限制地访问您的上游服务,这可能会对可用性产生负面影响。 一、全局范围内的限流 1、启用限流 [rootmin ~]# curl -i…

AI落地:儿童节贺卡

昨天有个朋友Lisa找到我,她是幼儿园的老师,看到我最近搞了个爱落地星球,在研究各行各业AI落地的事情,问我能不能用AI帮她写一百多张贺卡。 说起来写贺卡,我只会写“节日快乐”。现在有了ChatGPT,那就大不一…

十六、多线程(中)

文章目录 一、线程互斥(一)四个概念1.临界资源2.临界区3.互斥特性4.线程互斥5.原子性 二、互斥(一)在执行语句的任何地方,线程可能被切换走(二)切换会保存上下文(三)抢票…

用HTML、CSS和JavaScript实现鼠标可交互的3D太阳和月亮切换效果

部分数据来源:ChatGPT 引言 太阳和月亮对于我们来说是一种常见的对比,这篇文章将介绍一个使用HTML、CSS和JavaScript创建的网页场景,能够把太阳和月亮切换展示给用户。这个场景能够让用户使用鼠标和滚轮与场景互动,带来更多的趣…

解锁Qt QListWidget的全部潜力——用最佳实践和技巧赢得用户的喜爱和赞誉!

文章目录 前言一、属性和方法添加列表项获取当前选中的列表项删除列表项列表显示模式交替背景色 二、信号与槽选中的行数变化item被点击 三、解决icon图标模式下图标不对称的问题1、设置属性2、面向结果的手动换行 总结 前言 在现代的GUI应用程序中,列表框是必不可…

什么是千兆光模块和万兆光模块?它们有什么区别?

众所周知千兆光模块和万兆光模块的主区别在于它们的传输速率不一样,那你还知道千兆光模块和万兆光模块的其他区别吗?接下来海翎光电的小编将对千兆光模块和万兆光模块的区别进行详细解析。 什么是千兆光模块? 千兆光模块即传输速率为1000Mbps…

Java之路:构建坚实基础,系统学习Java技术的终极指南

无论是初学者还是有经验的专业人士,在学习一门新的IT技术时,都需要采取一种系统性的学习方法。作为一名Java技术er,下面我将介绍我是如何系统的学习Java技术的。 一、Java技术介绍 Java是一种广泛应用于软件开发的高级编程语言,…

数据链路层:点对点协议PPP

数据链路层:点对点协议PPP 笔记来源: 湖科大教书匠:点对点协议PPP 声明:该学习笔记来自湖科大教书匠,笔记仅做学习参考 数据链路层只负责直接相连的两个结点之间的通信 PPP是点对点数据链路层协议 用户通过ISP接入因特…

sklearn实现余弦相似度计算

from sklearn.metrics.pairwise import cosine_similarity cosine_similarity() 这个函数的输入是 n 个长度相同的 list 或 array 函数的处理是计算这 n 个 list 两两之间的余弦相似性 最后生成的是一个 n*n 的相似性矩阵s,s[i][j] 表示输入中第 i 个和第 j 个元…

如何在 Ubuntu Linux 上使用 SNAP 安装 Docker?

Docker 是一种开源的容器化平台,它允许开发人员将应用程序和其依赖项打包到一个可移植的容器中,以便在不同的环境中运行。在 Ubuntu Linux 上,我们可以使用 SNAP(一种软件包管理系统)来安装和管理 Docker。本文将详细介…

ProtoBuf 语法(一)

系列文章 ProtoBuf 语法(二) ProtoBuf 语法(三) 文章目录 前言一、字段规则二、消息类型的定义与使用2.1 定义2.2 使用 三、enum 类型3.1 定义规则3.2 注意事项 四、any 类型4.1 类型说明4.2 类型使用 五、oneof 类型六、map 类型…

HACKER KID: 1.0.1实战演练

文章目录 HACKER KID: 1.0.1实战演练一、前期准备1、相关信息 二、信息收集1、端口扫描2、访问网站3、扫描目录4、查看源码5、请求参数6、burpsuite批量请求7、编辑hosts文件8、DNS区域传输9、编辑hosts10、访问网站11、注册账号12、burpsuite抓包13、XML注入14、解密15、登录网…