matplotlib——1. 常用功能汇总

文章目录

  • 1.IDE里的
    • 1.1 显示模式(plt.ion()和plt.ioff())
    • 1.2 backend说明
  • 2. jupyter里的(主要是和iwidgets组件结合交互式)
  • 3 通用的
    • 3.0 根据颜色名称获取对应rgb值(0~255)
    • 3.1 cmap
      • 3.1.1 cmap绘制CMYK四个通道
      • 3.1.2 cmap绘制mask
    • 3.2 subplot()相关
    • 3.3 绘制动态图(Animation类)
    • 3.4 matplotlib利用rcParams配置样式参数
    • 3.5 显示中文
    • 3.6 plt.plot()参数详解
    • 3.7 移除坐标轴0左侧的空白
    • 3.8 matplotlib.collections.PatchCollection使用
  • 4. 与opencv连用
  • 可能遭遇的问题
    • 1. IDE不显示图像窗口

推荐可以看看这个:

  • apachecn/ds-ipynb-zh-数据科学 IPython 笔记本
  • 在线阅读:https://ds-ipynb.apachecn.org/#/docs/8.12

1.IDE里的

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

很有用的一点:
无论使用的是什么交互模式,都可以使用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.org-Interactive figures,这里也有关于IDE里交互式窗口的介绍
  • 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里的(主要是和iwidgets组件结合交互式)

TBD,需要进一步整理

之前总结过,可以看:

  • jupyter交互式查看图像
  • anaconda、pip及jupyter常见使用中 3.7和3.8部分

3 通用的

3.0 根据颜色名称获取对应rgb值(0~255)

from matplotlib import colors
# print(colors.to_rgb("tab:blue"))
for colorName in ["tab:blue", "tab:red","tab:green","white","black","white"]:color_rgb = [int(c*255) for c in colors.to_rgb(colorName)]print(color_rgb)
>[31, 119, 180]
[214, 39, 40]
[44, 160, 44]
[255, 255, 255]
[0, 0, 0]
[255, 255, 255]

参考:

  • stackoverflow:Convert matplotlib color value to RGB
  • https://matplotlib.org/2.0.2/api/colors_api.html
  • https://matplotlib.org/stable/tutorials/colors/colors.html
  • stackoverflow:Python from color name to RGB

3.1 cmap

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


3.1.1 cmap绘制CMYK四个通道

我遇到了一个比较简单的需求,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.1.2 cmap绘制mask

主要是使用matplotlib.colors.ListedColormap这个函数

import matplotlib
# 设置了一个西瓜的cmap
watermalon_cmap = matplotlib.colors.ListedColormap(["tab:blue", "tab:red","tab:green","white","black","white"],N=6)
# mask中值为0的地方是`tab:blue`背景色
# mask中值为1的地方是`tab:red`红色,....plt.subplot(1,2,1)
plt.imshow(img[:,:,::-1])
plt.subplot(1,2,2)
# 只显示单通道,同时值的范围不是0-255,没有normalize,只有0和5
plt.imshow(mask[:,:,0],cmap=watermalon_cmap)"""函数说明
matplotlib.colors.ListedColormap(colors,N)-colors:list, array
颜色列表,字符表示的颜色,或者是RGB/RGBA三元组/四元组表示的颜色
"""

在这里插入图片描述

参考:

  • ✅https://matplotlib.org/stable/tutorials/colors/colorbar_only.html
  • https://matplotlib.org/stable/api/_as_gen/matplotlib.colors.ListedColormap.html#matplotlib.colors.ListedColormap
  • https://matplotlib.org/stable/tutorials/colors/colormap-manipulation.html#creating-listed-colormaps
  • https://matplotlib.org/stable/gallery/color/named_colors.html

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

3.5 显示中文

之前写过一篇,在这里,macos或windows中 matplotlib中文显示(matplotlib字体常见使用)

3.6 plt.plot()参数详解

想画花里胡哨的图的话,这个函数的参数要懂一些。重点就是3个:线型,marker的标记形状和颜色,最多再来一个size,其他属性不太常见,有需要自己看。

下面是随机搭配生成的线,注明了使用的marker、线型和颜色,注意:markder不全都是字符串,有数字格式,标注为num_
在这里插入图片描述

主要参考:

  • matplotlib.pyplot.plot,其实重点是matplotlib.lines.Line2D这个类里的属性。
  • 属性marker:
    • set_marker,从描述中知道,这个也支持自己上传自定义的marker路径
    • matplotlib.markers,markers的完整图示,数的没错的话,是39种marker(包括none在内)
  • 属性linestyle:
    • set_linestyle,基础线型配上线基本单位之间的offset等,可以构建不同的线型,但是一般都会直接选择默认的。
    • Linestyles,默认的4种(包含none就是5种)+一些调整了线基本单位之间offset的自定义线型,一共19种线型示例
  • 属性colors:
    • matplotlib.colors
    • CSS Colors,可视化的颜色和对应名称
  • 属性text: matplotlib.pyplot.text
  • 属性legend:matplotlib.pyplot.legend

如果想要让线和marker颜色不一样,可以使用color来指定线的颜色,使用mfc='red', mec='k'来指定marker的markerfacecolor(marker的前景色,也可以使用mfc简写代替)和markeredgecolor(marker的边颜色,也可以使用mec简写代替),例如:

plt.plot([0, 50, 180, 256], [0, 30, 120, 256], "D-b", mfc='red', mec='k')

显示如下:
在这里插入图片描述
主要参考:

  • matplotlib.org-matplotlib.pyplot.plot,在这个页面搜索color就可以看到了
  • stackoverflow.com-Make Line plot markers of different color

3.7 移除坐标轴0左侧的空白

参考:How can I get rid of the white space in matplotlib?

只需要使用:

plt.margins(x=0)
# 或者
ax.margins(x=0)

就可以了,如下图,完全去除边界带来的问题就是原点处的点的marker,显示不全,但是会更符合常规认知的坐标系
在这里插入图片描述

3.8 matplotlib.collections.PatchCollection使用

写在另一个文章里了:

这个东西有一点点冷门,但是看起来很酷

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.rhkb.cn/news/16561.html

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

相关文章

大模型综述来了!一文带你理清全球AI巨头的大模型进化史

夕小瑶科技说 原创 作者 | 小戏,Python 如果自己是一个大模型的小白,第一眼看到 GPT、PaLm、LLaMA 这些单词的怪异组合会作何感想?假如再往深里入门,又看到 BERT、BART、RoBERTa、ELMo 这些奇奇怪怪的词一个接一个蹦出来&#x…

Maven依赖传递失效问题解决

Maven依赖传递失效问题解决 背景介绍问题描述解决方式 记一次非常规问题解决: maven依赖传递关联(传递)失效 背景介绍 首先maven工程结构大致是这样 (注意maven仓库 是本地仓库-公司中央仓库-远程仓库, 可能对理解遇到的问题原因和为何那样解决有些帮助): <groupId>com…

利用chatGPT搭配plantUML生成UML图

是不是感觉自己画uml图繁琐复杂没思路&#xff0c;画出来的uml图太简单&#xff1f;那就快来试试利用chatGPT搭配plantUML生成UML图&#xff0c;一键生成&#xff0c;自己调试解放双手&#xff0c;开拓思维&#xff0c;快来试试吧&#xff01; 在chatGPT中生成plantUML代码 如果…

谷歌发文批评苹果:实在是 “拖大家后腿”

1992 年 12 月 3 日&#xff0c;世界上第一条 SMS 消息成功发送&#xff0c;如今已经过去 30 周年。在这个关键节点&#xff0c;谷歌再度发文赞美 RCS 短信标准&#xff0c;并批评苹果迟迟不采用该标。 RCS 全称 Rich Communication Suite - 富媒体通信标准&#xff0c;属于高…

库克「豪赌」MR:七年磨一剑,不行也得行

苹果MR是一款在重重阻力之下、由库克强行拍板推向市场的产品。 作者&#xff1a;常嘉帅 “你们看懂了吗&#xff08;Are you getting it&#xff09;?”乔布斯这样问&#xff0c;“一台音乐播放器&#xff0c;一部手机&#xff0c;和一部互联网通讯设备。” 乔布斯以他魅力十足…

我问了10个博客专家好友,原来他们都在用这些高效率软件

大家好&#xff0c;我是记得诚。 在CSDN上我认识了很多大佬级别的博客专家&#xff0c;最近询问了我的10个博客专家好友&#xff0c;向他们取经&#xff0c;扒出了他们珍藏的高效率软件&#xff0c;很多软件我用完之后&#xff0c;当场发出了OMG的尖叫&#xff0c;我重度使用了…

何同学采访苹果CEO库克上热搜,网友表示自愧不如

昨日&#xff0c;22岁B站知名UP主“老师好我叫何同学”采访了苹果CEO蒂姆-库克&#xff0c;登上微博热搜榜&#xff0c;引起了网友们的热议。 何同学是北京邮电大学学霸&#xff0c;22岁的大学生&#xff0c;出于兴趣的原因在B站注册账号发布数码产品的测评视频&#xff0c;他做…

“AI教父”李开复筹办新公司,掘金 AI 2.0 三个大方向

图片&#xff1a;由无界AI画图工具生成 3月19日&#xff0c;创新工场董事长兼CEO李开复在朋友圈宣布&#xff0c;正在筹组一个名为“Project Al 2.0”的新公司&#xff0c;一个旨在探索AI2.0的创新项目。 图片&#xff1a;李开复在朋友圈紧急“摇人”PK chatGPT 目前&#xff0…

谁能真正替代你? AI编码工具深度对比 (chatGPT/Copilot/Cursor/New Bing)

写在开头 这几个月AI相关新闻的火爆程度大家都已经看见了&#xff0c;作为一个被裹挟在AI时代浪潮中的程序员&#xff0c;在这几个月里我也是异常兴奋和焦虑。甚至都兴奋的不想拖更了。不仅仅兴奋于AI对于我们生产力的全面提升&#xff0c;也焦虑于Copilot等AI辅助编码工具&…

【ChatGPT】《ChatGPT 算法原理与实战》1: 引言:从 CNN、RNN 到 Transformers 架构、自注意力机制(图文+数学公式+代码实例详解)

文章目录 1: 引言:从 CNN、RNN 到 Transformers自然语言处理的挑战传统方法的限制Recurrent neural networks | 循环神经网络How RNN works : RNN 的工作原理RNN 的数学模型最新研究发展:RNN、LSTM等Transformers的出现GPT和ChatGPT2: 基本概念编码器解码器训练 Transformer …

解放创作生产力:30+实用AI工具汇总

除了ChatGPT&#xff0c;还有哪些好用AI工具&#xff1f; 带着这个问题&#xff0c;也为了解AIGC已经在哪些场景落地&#xff0c;我体验了30多个AI工具并且分享出来&#xff0c;希望对你有帮助。 文字 ChatGPT —— 解决任何问题 地址&#xff1a;https://chat.openai.com/ch…

《花雕学AI》ChatGPT的技术原理、算法竞争力、应用场景以及未来发展方向

一、ChatGPT是一个可以和你聊天的人工智能程序&#xff0c;它可以用文字回答你的问题&#xff0c;也可以根据你的提示写出文章、歌词、代码等内容。ChatGPT是由一个叫OpenAI的机构开发的&#xff0c;它使用了一种叫做GPT的技术&#xff0c;这种技术可以让它从互联网上学习大量的…

谷歌账号被封怎么办?谷歌账号解封申诉步骤请收好!

谷歌账号有多重要&#xff1f;相信很多跨境人和社媒营销人都会深有感悟的&#xff0c;谷歌账号可以说是国外互联网的一个通行证&#xff0c;国外非常多的网站都是支持使用谷歌账号登录的。 谷歌账号对企业进军海外市场是非常重要的存在&#xff0c;然而谷歌账号一旦操作不当是很…

ChatGPT MidJourney 生成动画故事

chatgpt是真的火了&#xff0c;chatgpt产生了一个划时代的意义——自chatgpt起&#xff0c;AI是真的要落地了。 chatgpt能做的事情太多了&#xff0c;多到最初开发模型的程序员自己&#xff0c;也没法说得清楚chatgpt都能做啥&#xff0c;似乎只要你能想得到&#xff0c;它都有…

100天精通Python丨黑科技篇 —— 20、Python 修图(滤镜、灰度、裁剪、视觉处理、图像分割、特征提取)

文章目录 一、PIL 常规修图操作1. 读取图片2. 图片缩放3. 图片旋转4. 图片裁剪5. 图片滤镜二、OpenCV 图像处理、视频处理、对象识别三、scikit-image 视觉算法,包括滤波、形态学操作、图像分割、特征提取四、TensorFlow 图像分类、目标检测、图像生成有些小伙伴可能还不知道,…

AIGC是日烧百万的销金窟,但有应用场景的公司不在乎

梦晨 衡宇 发自 凹非寺量子位 | 公众号 QbitAI 没想到&#xff0c;第一批AI绘画产品已经开始倒闭了…… StockAI&#xff0c;成立仅4个月&#xff0c;在2022年底因用户付费无法覆盖成本&#xff0c;遗憾宣布关闭平台、退款。 以3月的付费AI绘画平台Midjourney推出为标志&#x…

重磅消息!GPT Plus 暂停升级?刚刚恢复啦!

ChatGPT目前是最火的产品&#xff0c;很多同学都在用GPT帮助自己工作&#xff0c;学习&#xff0c;提高效率&#xff01;尤其是GPT4&#xff0c;性能强GPT3.5很多倍&#xff01; 一旦用上了GPT4你会发现&#xff0c;真的是离不开它&#xff01;这个超强的人工智能&#xff0c;几…

自媒体大咖经验分享

&#x1f469;&#x1f3fc;‍&#x1f4bc;&#x1f469;&#x1f3fc;‍&#x1f4bc;2023下班后干什么&#xff1f; &#x1f484;&#x1f484;做自媒体啊&#xff01; &#x1f48b;&#x1f48b;现在不卷&#xff0c;更待何时&#xff1f; ✍&#x1f3fc;✍&#x1f3fc…

个人电脑应用常识记录

查看当前电脑所连接WIFI 密码EE 知识参考CSDN markdown 导出成 wordCSDN markdown 实现页内跳转SSD 硬盘检测软件推荐CPU 检测工具CPU-Zios - SMB 配置&#xff08;实测可用&#xff09;Win 10 LTSC 安装 Microsoft StoreWin 10 LTSC 安装 Microsoft Store 方法二AD16 安装&…

Ubuntu20.04 -- 小白系列3 之小笔记(含ubuntu向日葵远程系统切换)

目录 1、4K高清壁纸 2、Ubuntu强制重启或关机&#xff0c;出现you are in emergency mode 3、提醒休息软件pomatez(下载deb文件) 4、如何设置开机启动选项的等待时间 5、福昕PDF下载 6、cmake..报错 7、 错误 由于没有公钥&#xff0c;无法验证下列签名 8、无法连接&am…