matplotlib你真的明白plt,fig和ax吗

news2024/11/26 4:35:08

你真的明白plt,fig和ax吗?

plt系列接口是用来模仿MATLAB的风格的。如果用户熟悉MATLAB,还是建议以plt为主的。对于基本的画图,plt系列足够了。
个人觉得,真正不合适的用法,反而是各种混淆plt接口和其它更细节的内部接口函数,混杂着用,成了四不像。
学习matplotlib的过程和其它包应该有所区别:如果每次打开CSDN一顿搜索,是很难掌握matplotlib的,因为matplotlib一个相同的功能实现方式很多:
plt.title()ax.title.set_text('title')ax.set_title()居然是相同的,如下图:

import matplotlib.pyplot as plt
import numpy as np

plt.style.use('_mpl-gallery')

# make data
np.random.seed(1)
x = np.linspace(0, 8, 16)
y1 = 3 + 4*x/8 + np.random.uniform(0.0, 0.5, len(x))
y2 = 1 + 2*x/8 + np.random.uniform(0.0, 0.5, len(x))

# plot
fig, ax = plt.subplots(1, 3, figsize=(12, 4))

for i in range(3):
    ax[i].fill_between(x, y1, y2, alpha=.5, linewidth=0)
    ax[i].plot(x, (y1 + y2)/2, linewidth=2)

    ax[i].set(xlim=(0, 8), xticks=np.arange(1, 8),
           ylim=(0, 8), yticks=np.arange(1, 8))
    plt.title('plt.title')
    ax[0].set_title('ax.set_title')
    ax[1].title.set_text('ax.title.set_text') 
plt.show()

这就表明如果每次都要手动搜索的话,会非常不确定,因为一种效果有完全不同的实现方式,这次搜到这个,下次搜到那个:
笔者在初学的时候,碰见在figure, axes, axis这几个词就头大

plt vs ax

尝试区分.plt和ax.plot,为什么matplotlib能用不同方式来实现同一功能?
在底层逻辑上,matplotlib架构上分为两层:底层和高层。高层是底层的封装,现在可以加一个最高层seaborn,cartopy等等…
在任意一层操作都能够实现画图的目的,而且画出来是一样的。但越底层的操作越细节,越高层越易于人机交互。
(如最高层searborn,几行代码就行了。最底层ax,反复调节各种轴)
.plt 对应的就是最高层,这就是为什么它简单上手,但要调细节就不方便了。
ax.plot是底层,基本上可以实现任何细节的调试。

看matplotlib官方提供的图绘说明:

  • Figure是“画布”,画图的第一件事,就是创建一个画布figure,加各种元素
  • axes是“坐标系”,这个命名不太准确,不仅是坐标轴的复数,它应该是物理中“坐标系”的概念,或工程制图中“图纸”的概念,它保证了你在图中画多个物体,这多个物体能在同一个坐标系中。axes包含大部分图像元素,比如坐标轴,标签,注释文字,刻度线等等
  • Axis是“坐标轴”,每个坐标轴上包括下列元素:

right plot way

正确的画图方式是fig, ax = plt.subplots(),虽然大多数教程以plt.xxx开始,这虽然好上手,但是不便于对代码的理解

#手搓数据
import matplotlib.pyplot as plt
import numpy as np
# make data: correlated + noise
np.random.seed(1)
x = np.random.randn(5000)
y = 1.2 * x + np.random.randn(5000) / 3

ax与plt大部分是通用的,因为我们用了“正统”的画图方式,为了避免混淆,全用ax

# plot:
fig, ax = plt.subplots()

ax.hexbin(x, y, gridsize=20)
plt.show()

用ax调节细节:
xlim,xlablegrid都是ax这一层的

fig, ax = plt.subplots(figsize=(3, 3))

ax.hexbin(x, y, gridsize=20, cmap='BuPu')
ax.set(xlim=(-2, 2), ylim=(-3, 3))
ax.set_xlabel('thisisx', fontsize=12, fontfamily='sans-serif',fontstyle='italic')
ax.set_ylabel('thisisy', fontsize='x-large',fontstyle='oblique')
ax.grid(color='lightgrey', linestyle='--', linewidth=1)
plt.show()

最后是坐标轴tick和细节,这个在axes.xaxis或者axes.yaxis上完成。

fig, ax = plt.subplots(figsize=(3, 3))

ax.hexbin(x, y, gridsize=20, cmap='BuPu')
ax.set(xlim=(-2, 2), ylim=(-3, 3))
ax.set_xlabel('thisisx', fontsize=12, fontfamily='sans-serif',fontstyle='italic')
ax.set_ylabel('thisisy', fontsize='x-large',fontstyle='oblique')
ax.grid(color='lightgrey', linestyle='--', linewidth=1)

ax.xaxis.set_tick_params(rotation=45,labelsize=12,colors='saddlebrown') 
start, end = ax.get_xlim() 
ax.xaxis.set_ticks(np.arange(start, end,1)) 
ax.yaxis.tick_right()

plt.show()

这样就完成对matplotlib的所有操作了

后台回复【matplotlib】可以领取速查表:

image-20221127103703719

image-20221127103713773

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

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

相关文章

单目相机模型

针孔相机模型 针孔相机模型是实际研究中最常用的模型。针孔是一个中间有一个小孔的假想墙壁,光只能从小孔通过。 fff是摄像机焦距,ZZZ是摄像机到物体的距离,XXX是物体长度,是图像平面上的物体长度。由相似三角形可得&#xff1a…

护眼灯真的可以保护眼睛吗?市面上的护眼台灯到底是不是智商税

护眼灯能不能保护眼睛,护眼灯是不是智商税,这是很多人一直以来都有的疑惑,其实啊,这并不难判断,直接入手体验一下就知道了,有没有护眼效果,照明体验是否舒适,一试便知。 护眼灯怎样…

Java解决鸡兔同笼问题

1 问题 利用java程序:输入鸡和兔的总数和总腿数,来计算兔子和鸡的各个数量。 2 方法 import java.util.Scanner; /** * 已知鸡和兔的总数量为n,总腿数为m。 * 输入n和m,依次输出鸡和兔的数目, * 如果无解,则输出“No answer” */ …

[漏洞复现]Text4shell(CVE-2022-42889)

文章目录简介影响版本环境搭建漏洞复现漏洞修复参考简介 Apache Commons Text 项目实现了一系列关于文本字符串的算法,专注于处理字符串和文本块。10月13日,Apache发布安全公告,修复了Apache Commons Text中的一个远程代码执行漏洞&#xff…

GJB 5000B简介

“软件定义装备”是武器装备信息化职能化发展的比如趋势,J用软件在信息化战争和J事智能化进程中起着基础性决定性作用。 1、GJB 5000由来 1991年 推出CMM 目的:用来衡量组织软件综合能力 2000年,SEI发布CMMIV1.0(Capability Maturity Model Integration)能力成熟度模型集…

「低碳」不是特步的解药

(图片来源于网络,侵删) 文|螳螂观察 作者|叶小安 一双跑鞋就能减少碳排放424克,相当于回收16个饮料瓶。 这样一双低碳跑鞋,你会购买吗? 今年进博会上,特步带来了首款Mass Balance低碳环保概…

资本赋能,跨境电商Starday逐鹿年终场

国内巨头很早就看到跨境电商行业的发展前景了,最有代表性的就是阿里巴巴旗下的全球速卖,其在2012年就开始布局并开展跨境电商业务了,这些年来,诸如字节跳动、京东、拼多多等国内电商巨头纷纷跟上阿里巴巴步伐,进军跨境…

Scrapy基本概念——Scrapy shell

Scrapy shell是一个交互式shell,可以在不运行Spider的情况下,测试和调试自己的数据提取代码。事实上,Scrapy shell可以测试任何类型的代码,因为它本就是一个常规的Python shell。 一、Scrapy shell的使用 1、启动Scrapy shell …

【iMessage苹果家庭】共享推软件设备安装创作AppleScript增加了iMessage群应用会得到一个硬件token

推荐内容IMESSGAE相关 作者推荐内容iMessage苹果推软件 *** 点击即可查看作者要求内容信息作者推荐内容1.家庭推内容 *** 点击即可查看作者要求内容信息作者推荐内容2.相册推 *** 点击即可查看作者要求内容信息作者推荐内容3.日历推 *** 点击即可查看作者要求内容信息作者推荐…

计算机图形学-算法总结

文章目录计算机图形学-算法总结一、直线转换1、DDA算法2、中点法3、Bresenhan算法二、圆1、中点Bresenham画圆算法2、椭圆的中点Bresenham算法计算机图形学-算法总结 一、直线转换 1、DDA算法 Δyyn−y0Δxxn−x0ε1max(∣Δx∣,∣Δy∣)\Delta yy_n-y_0 \\ \Delta xx_n-x_0\…

小杨哥陷入打假风波,会变成下一个辛巴吗?

最近,网红疯狂小杨哥频繁登上热搜。最初的起因是他花了1亿元在合肥一家高科技公司购买了5万多平方米的房产,作为他名下公司的全球总部,由此带来了争议。 据了解,该物业总建筑面积为53874.33平方米,包括1个生产综合体、…

一步一步带你深入源码看Spring是如何加载XML配置文件的

Spring 的在实际开发过程中都是以XML 配置文件注解的形式进行使用,那么XML配置文件的读取是Spring中重要的功能, 在Spring中,加载XML配置文件的语句如下: 使用ClassPathXmlApplicationContext类的构造函数加载XML配置文件,代码如下: ClassPathXmlApplicationContext()方法调…

蓝桥杯控制PCF8591

目录 一、AD转换 (1)PCF8591初始化 (2)获取PCF8591ADC转换结果 (3)实例程序​编辑 二、DA转换 (1)PCF8591初始化 (2)写入数模转换的值 (3&am…

一个快速切换浏览器搜索引擎的小技巧(在地址栏搜索B站、书签等的方法)

一、背景 Chrome谷歌浏览器的地址栏是可以搜索的,我们怎么能临时切换到别的搜索引擎呢?(注意不是改地址栏默认的搜索引擎) 改搜索引擎:谷歌浏览器默认谷歌搜索引擎,很多人估计都会改成百度。我虽然能用谷歌…

四、nginx负载均衡[轮询]

一、负载均衡 解释:负载均衡分为两部分(应用集群和负载均衡器)。应用集群:将同一应用部署到多台机器上,组成处理集群,接收负载均衡设备分发的请求,进行处理并返回响应的数据。负载均衡器:将用户…

C语言库函数— qsort () 详解

目录 1. qsort()函数简介 1.1 函数原型 1.2 函数参数 2. 比较函数简介 2. 1 比较函数参数 2.2 比较函数使用 3. qsort()函数使用 3.1 整形数组排序 3.2 字符数组排序 3.3 浮点型数组排序(double类型为例) 3. 4 字符串数组排序 3.5 结构体…

Spring Security(十八)--OAuth2:实现授权服务器(上)--环境准备以及骨架代码搭建

一、前言 本节大家如果一直从一开始看过来的话,就会巧妙发现我们将之前的实践代码全部连接起来,本节将会使用到之前的短信/验证码登录相关的逻辑代码,如果大家没有看的感兴趣可以回到https://editor.csdn.net/md/?articleId127617691先将这…

【pdf翻译中文】免费自用日语pdf转中文、韩语pdf转中文(也可以转英文)或者其他小语种法语、德语pdf转中文

不是很精确、有点慢,但是也够用,胜在免费free 效果图: 一些对比: 模型来自于: https://huggingface.co/models 文件目录 调用模型的代码: 运行此段代码,执行翻译 一些简单的设置在这里…

【LeetCode每日一题】——557.反转字符串中的单词 III

文章目录一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【题目提示】八【时间频度】九【代码实现】十【提交结果】一【题目类别】 字符串 二【题目难度】 简单 三【题目编号】 557.反转字符串中的单词 III 四【题目描述】 给…

DPU1.1S—高性能、低功耗4口高速USB2.0HUB控制器芯片

DPU1.1S是一款高性能、低功耗4口高速 USB2.0 HUB 控制器,上行端口兼容高速 480MHz和全速12MHz两种模式,4个下行端口兼容高速480MHz、全速12MHz、低速1.5MHz三种模式。 DPU1.1S采用状态机单事务处理架构,而非单片机架构,多个事务缓…