matplotlib常用函数总结

news2024/11/23 8:00:49

文章目录

  • 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

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/589488.html

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

相关文章

迭代器的设计原则

iterator必须提供5种associated types 1.iterator_category 2.value_type 3.diiference_type 4.pointer 5.reference 对于iterator_category来说,例如双向链表:typedef bidirectional_iterator_tag iterator_category;算法和迭代器的关系: 算法提问&a…

WAV 格式和音频裁剪、转码处理

文章目录 0、参考资料1、WAV 格式了解1.1 WAV 文件头1.2 RIFF Chunk 区块1.3 Format Chunk 区块1.4 Data Chunk 区块 2、音频剪裁 -> 解码 -> 编码2.1 mp32.1.1 裁剪2.1.2 解码2.1.3 编码 2.2 pcm 裁剪 0、参考资料 【音频处理】WAV 文件格式分析 ( 逐个字节解析文件头 …

用友BIP新一代全球司库,重塑企业资金管理新价值

资金是企业有效推进业务运营与发展并赖以生存的血液和养料,资金管理是企业财务管理的核心职能,在《“十四五”中央企业发展规划纲要》中明确央企要将集团资金管理业务规划置于重要战略位置。而国资委1号文发布,则进一步强调司库建设对中央企业…

2核2G3M腾讯云轻量应用服务器CPU性能测评

阿里云轻量应用服务器2核2G3M带宽一年95元,100%CPU性能,3M带宽下载速度384KB/秒,40GB SSD系统盘,月流量200GB,折合每天6.6GB流量,超出月流量包的流量按照0.8元每GB的支付流量费,地域节点可选广州…

vue+springboot前后端分离项目整合部署流程

我们在进行前后端分离开发的时候,一般是将前端项目部署到nginx服务器上,与后端项目分开部署,但是如果是个人开发的小型项目,不需要这么麻烦,直接将前后端项目放到一起部署即可。 本文就来介绍一下前后端项目一起部署的…

第一章 部署DHCP服务

♥️作者介绍:奇妙的大歪 ♥️个人名言:但行前路,不负韶华! ♥️个人简介:云计算网络运维专业人员 目录 DHCP:动态主机配置协议 1.DHCP的优点 2.DHCP的分配方式 3.DHCP的工作原理(租约过程…

winows搭建远程仓库Github(linux通用)

winows搭建远程仓库Github(linux通用) 文章目录 winows搭建远程仓库Github(linux通用)创建远程仓库配置SSH克隆项目多人协同开发代码冲突标签分支 创建远程仓库 以下操作为演示在Github网站上创建远程仓库 1.登陆注册Github 2.创…

Linux知识点 -- 进程概念(二)

Linux知识点 – 进程概念(二) 文章目录 Linux知识点 -- 进程概念(二)一、进程优先级1.概念2.进程中的优先级信息3.更改进程优先级4.进程切换 二、环境变量1.概念2.常见的环境变量3.环境变量相关命令4.通过代码获取环境变量5.环境变…

JDK相关知识

查看是否安装了jdk java -version 将输出当前系统上默认 Java 环境的版本信息,其中包括 JDK 的位数(64 位或 32 位)。如果输出中包括 “64-Bit” 或 “x64” ,则表示你的 JDK 是 64 位的;否则,它就是 32 位…

PackML 学习笔记

PackML 的官网 上如此描述PackML--- PackML是由OMAC开发并由ISA采用的自动化标准TR88.00.02,可以更轻松地传输和检索一致的机器数据。PackML的主要目标是鼓励整个工厂车间的通用“外观和感觉”,并支持和鼓励行业创新。 优点 这里的重点是通用“外观和感…

MySQL树状结构表查询通解

文章目录 前言一、数据准备二、代码实现三、案例使用1. 建立数据表实体类2. mapper文件3. 使用 四、总结 前言 ​ 最近做了一个中医药方面的项目,该项目分为游戏端和服务端。笔者负责的是服务端的开发。在服务端的业务中包含两部分:系统信息管理模块、游…

这是我见过对redis最直白的讲解,看完我哭了......

我是Redis 你好,我是Redis,一个叫Antirez的男人把我带到了这个世界上。 说起我的诞生,跟关系数据库MySQL还挺有渊源的。 在我还没来到这个世界上的时候,MySQL过的很辛苦,互联网发展的越来越快,它容纳的数…

0801向量及其线性运算-向量代数与空间解析几何

1 向量的概念 既有大小又有方向的量叫做向量(或矢量)。 表示 用有向线段表示向量: 向量大小:有向线段的长度向量方向:有向线段的方向 示例如下图1-1所示: 记法:字母上面加箭头 单字母&#x…

9.前后端的身份认证

1 web开发模式 开发模式有两种,一种是服务端直接返回html字符串,另一种是前后端分类 服务端直接返回html字符串是这样的 这样做的优缺点如下 优点 加载页面快,这样会让设备的能耗减小,对于移动端来讲更省电利于搜索引擎获取数…

北京筑龙吴英礼:ChatGPT在采购与招标中的应用

近日,由中国招标投标协会举办的“人工智能对招标采购数字化发展的机遇与挑战交流座谈会”在北京召开。北京筑龙CTO吴英礼受邀出席,围绕"ChatGPT在招标投标中的应用"进行探讨,从ChatGPT背后的的技术、ChatGPT助力招标投标行业数字化…

【C++】-8- string〔常见接口函数使用〕

文章目录 概览标准库中的string类「string类(了解)」﹝编码﹞ 「string类的常用函数接口」﹝1.string类对象的常见构造﹞﹝2.string类对象的修改操作﹞‹ c_str ›‹ npos ›‹ string结构 › ﹝3.string类对象的容量操作﹞‹ clear ›‹ reserve ›‹ r…

Pulsar 负载均衡与transaction_coordinator_assign

背景与现状 TC加载到哪个broker上取决于transaction_coordinator_assign-partition-${TC ID}分区加载到哪个broker上。 默认transaction_coordinator_assign有16个分区,因此默认有16个TC,我们需要根据集群机器/broker数目来设置合理的TC个数。 为了保证…

如何使用递归 Grep 命令在目录中搜索?

在 Linux 系统中,grep 是一个强大的文本搜索工具,可以用于在文件中查找指定的文本模式。当需要在目录及其子目录中搜索特定的文本时,可以使用递归 grep 命令来快速定位目标文件。本文将详细介绍如何使用递归 grep 命令来搜索目录中的文件。 递…

如何搭建第一个SpringBoot+MyBatis项目

🙈作者简介:练习时长两年半的Java up主 🙉个人主页:程序员老茶 🙊 ps:点赞👍是免费的,却可以让写博客的作者开兴好久好久😎 📚系列专栏:Java全栈,…

ChatGPT已能模仿任何写作风格,让你的自媒体快速起号

我认识的一两个技术大佬目前失业在家,压力不小。对于现在的就业市场来说,再找工作,高不成低不就。他们的薪资,一般企业无法承受,大厂岗位又在缩减。今年真正感受到了寒冬。 对于我们还有饭吃的程序员,现在不…