Matplotlib学习笔记(第二章 2.11使用指南 一些简单的例子)

news2024/11/19 15:40:10

第二章 学习指南

本页包含更多使用Matplotlib的深入指南。它分为初级、中级和高级部分,以及涵盖特定主题的部分。

有关较短的示例,请参阅我们的示例页面。您还可以在我们的用户指南中找到外部资源和FAQ。

2.1介绍

这些教程涵盖了使用Matplotlib创建可视化的基础知识,以及有效使用该包的一些最佳实践。

2.1.1使用指南

本教程涵盖了一些基本的使用模式和最佳实践,以帮助您开始使用Matplotlib。

import matplotlib.pyplot as plt
import numpy as np

一个简单的例子

Matplotlib将数据绘制到图形(figure)(即窗口、Jupyter小部件等)上,每个图形(figure)都可以包含一个或多个绘图区域(axes)(即,可以用x-y坐标指定点的区域,或者用极坐标中的theta-r,或者用3D图中的x-y-z等指定点)。创建具有绘图区域的图形,最简单方法是使用pyplot.subplots。我们可以使用Axes.plot在绘图区域上绘制一些数据:

fig, ax = plt.subplots() # 创建包含单个绘图区域的图形。
ax.plot([1, 2, 3, 4], [1, 4, 2, 3]) # 在绘图区域上画一些数据。plot是画线的函数

在这里插入图片描述

输出:

[<matplotlib.lines.Line2D object at 0x7f5eff0589d0>]

许多其他绘图库或语言不需要显式地创建绘图区域。例如,在MATLAB中,我们可以这样做得到想要的图形:

plot([1, 2, 3, 4], [1, 4, 2, 3]) % MATLAB plot.

实际上,您可以在Matplotlib中做同样的事情:对于每个Axes绘图方法,在matplotlib.pyplot中都有一个相应的函数,它在“当前”绘图区域执行该绘图,如果绘图区域(Axes)及其父图形(figure)还不存在,则创建它们。因此,前面的例子可以写得更简短:

plt.plot([1, 2, 3, 4], [1, 4, 2, 3]) # Matplotlib绘制图表

在这里插入图片描述

输出:

[<matplotlib.lines.Line2D object at 0x7f5eff2dacd0>]

图的组成部分

现在,让我们更深入地看看Matplotlib图的组件。

在这里插入图片描述

Figure

Figure即整个图形,可以理解为整张画纸。Axes相当于画纸上的某个区域。

Figure会跟踪所有的子坐标轴、少数“特殊”的设计(标题、图例等)和画布。(不要太担心画布,这是至关重要的,因为它是真正为你绘制图形的对象,但作为用户,它或多或少对你是隐形的)。Figure可以包含任意数量的绘图区域,但通常至少有一个。

创建新图形最简单的方法是使用pyplot:

fig = plt.figure() # 一个空白的图形,上面没有绘图区域
fig, ax = plt.subplots() # 图形上,有一块绘图区域
fig, axs = plt.subplots(2, 2) # 图形上有2*2块绘图区域

与整个图形一起创建绘图区域很方便,但你也可以稍后添加绘图区域,允许更复杂的绘图区域布局。

Axes

这就是你认为的’a plot’,它是图像的数据空间区域。给定的figure可以包含多个Axes,但给定的Axes对象只能在一个figure中。Axes包含两个(在3D情况下是三个)Axis(坐标轴对象),它们负责数据限制。

注意Axes 和 Axis之间的区别

数据限制也可以通过axes.Axes.set_xlim()axes.Axes.set_ylim()方法进行控制。每个Axes都有一个标题(通过set_title()设置)、一个x标签(通过set_xlabel()设置)和一个y标签(通过set_ylabel()设置)。

Axes类及其成员函数是使用OO接口的主要入口点。

Axis

这些是类似于数轴的对象。它们负责设置图形限制和生成刻度(轴上的标记)和标记标签(标记刻度的字符串)。标记的位置由Locator对象确定,而标记标签字符串由Formatter格式化。正确的Locator和Formatter的组合可以很好地控制标记位置和标签。

Artist

基本上,您在figure上看到的一切都是一个艺术家(甚至是figure、Axes和Axis对象)。

 Text objects, Line2D objects, collections objects, Patch objects ... 

这包括文本对象,Line2D对象,集合对象,补丁对象…(你懂的)。

当人物被渲染时,所有的艺术家都被吸引到画布上。大多数艺术家都被绑定在一个绘画区域中;这样的艺术家不能被多个绘画区域共享,或从一个绘画区域移动到另一个绘画区域。

绘图函数的输入类型

所有的绘图函数的输入数据都希望是 numpy.array或numpy.ma.masked_array。

其他类似的数组,如pandas数据对象和numpy.matrix(矩阵),可能会,也可能不会按预期工作。在绘图之前,最好将它们转换为 numpy.array对象。

例如:转换一个pandas.DataFrame:

a = pandas.DataFrame(np.random.rand(4, 5), columns = list('abcde'))
a_asarray = a.values

转换一个 numpy.matrix:

b = np.matrix([[1, 2], [3, 4]])
b_asarray = np.asarray(b) # 将输入转为数组格式:ndarray类型

面向对象的接口和pyplot接口

如上所述,有两种使用Matplotlib的方法:

  • 显式地创建图形(figure)和绘图区域(axes),并在它们上调用方法(“面向对象(OO)风格”)。
  • 依赖pyplot自动创建和管理图形(figure)和绘图区域(axes),并使用pyplot函数进行绘图。

所以我们可以这样绘图(oo风格):

x = np.linspace(0, 2, 100)
# 注意,即使在oo风格中,我们也使用.pyplot来创建figure
fig, ax = plt.subplots() # 创建图形和绘图区域
ax.plot(x, x, label='linear') # 在绘图区域上画一些数据
ax.plot(x, x**2, label='quadratic') # 在绘图区域上画更多的数据
ax.plot(x, x**3, label='cubic') # ... 绘制更多
ax.set_xlabel('x label') # 在绘图区域添加x轴标签
ax.set_ylabel('y label') # 在绘图区域添加y轴标签
ax.set_title("Simple Plot") # 在绘图区域添加标题
ax.legend() # 添加图例

在这里插入图片描述

输出:

<matplotlib.legend.Legend object at 0x7f5eff043970>

或者 (pyplot-style):

x = np.linspace(0, 2, 100)
plt.plot(x, x, label='linear') # 在隐藏的绘图区域画一些数据
plt.plot(x, x**2, label='quadratic') # 绘制更多
plt.plot(x, x**3, label='cubic')
plt.xlabel('x label')
plt.ylabel('y label')
plt.title("Simple Plot")
plt.legend()

在这里插入图片描述

输出:

<matplotlib.legend.Legend object at 0x7f5efdc033a0>

此外,还有第三种方法,在GUI应用程序中嵌入Matplotlib来创建图形,这种方法完全放弃了pyplot。我们不在这里讨论;有关更多信息,请参见图库中相应的部分(用户界面)。

Matplotlib的文档和示例同时使用了OO和pyplot方法(这两种方法同样强大),您可以随意使用任何一种方法(不过,最好选择其中一种并坚持使用,而不是混合使用)。一般来说,我们建议将pyplot限制为交互式绘图(例如,在Jupyter笔记本中),而对于非交互式绘图(在打算作为大型项目一部分重用的函数和脚本中)更倾向于oo风格。


注意:在较早的例子中,你可能会发现一些例子使用了所谓的pylab接口:from pylab import *。因为这个命令可以从pyplot和numpy导入所有内容,所以这样做更像matlab的风格。这种方法现在被大家强烈反对,这里提到它只是因为你可能还会偶尔遇到它。


通常情况下,人们会发现自己反复绘制相同的图,但使用不同的数据集,这导致需要编写专门的函数来绘制图。推荐的函数写法是这样的:

def my_plotter(ax, data1, data2, param_dict):
    """
    绘图帮助
    参数
    ----------
    ax : Axes
    绘图区域
    data1 : array 
    数据x
    data2 : array
    数据y
    param_dict :dict
    要传递给ax.plot的关键字参数的字典
    返回
    -------
    输出 : list
    增加的绘图列表
    """
    out = ax.plot(data1, data2, **param_dict)
return out

你可以这样用:

data1, data2, data3, data4 = np.random.randn(4, 100)
fig, ax = plt.subplots(1, 1)
my_plotter(ax, data1, data2, {'marker': 'x'})

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OcybKwQq-1670393958076)(E:\Python\期货交易Python工作区VSCode\回测系统2022.12\image-20221207010757276.png)]

输出:

[<matplotlib.lines.Line2D object at 0x7f5efef5a520>]

或者如果你想有两个副图:

fig, (ax1, ax2) = plt.subplots(1, 2) # 1行2列
my_plotter(ax1, data1, data2, {'marker': 'x'})
my_plotter(ax2, data3, data4, {'marker': 'o'})

在这里插入图片描述

输出:

[<matplotlib.lines.Line2D object at 0x7f5eff2bf1f0>]

对于这些简单的例子来说,这种风格似乎有些过头,但是一旦图表变得稍微复杂一些,它就会得到回报。

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

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

相关文章

P4设计实现链路监控

实验要求 在本次实验中&#xff0c;目的是编写一个P4程序&#xff0c;使主机能够监控网络中所有链路的使用情况本练习基于基本的IPv4转发练习&#xff0c;因此请确保在尝试此练习之前完成此练习&#xff08;basic.p4&#xff09;具体来说&#xff0c;我们将修改基本P4程序以处…

使用ChatGPT完成分类、检测、分割等计算机视觉任务(Pytorch)

前言 ChatGPT是一个由OpenAI训练的大型语言模型&#xff0c;其知识涵盖了很多领域。 虽然ChatGPT表示它不能用于写代码&#xff0c;但是万一是它太谦虚了呢&#xff1f; 下面的文字均为ChatGPT给出的回答。 使用ChatGPT解决图像分类任务 我们需要一个PyTorch模型&#xff0…

11-18-kafka-生产者理论

11-kafka-理论&#xff1a; Kafka 工作流程及文件存储机制 Kafka 工作流程 Kafka 中消息是以 topic 进行分类的&#xff0c;生产者生产消息&#xff0c;消费者消费消息&#xff0c;都是面向 topic的。 topic 是逻辑上的概念&#xff0c;而 partition 是物理上的概念&#xf…

【MySQL】MySQL数据库结构与操作

✨个人主页&#xff1a;bit me ✨当前专栏&#xff1a;MySQL数据库 ✨每日一语&#xff1a;自从厌倦于追寻&#xff0c;我已学会一觅即中&#xff0c;自从一股逆风袭来&#xff0c;我已能抗御八面来风&#xff0c;驾舟而行。 目 录 &#x1f334;一. 数据库介绍&#x1f33f;1.…

工业物联网解决方案:地下水实时监测系统

地下水是水资源的重要组成部分&#xff0c;它具备水量稳定、水质好等特点&#xff0c;是农业灌溉、工矿和城市的重要水源之一&#xff0c;但同时也会出现沼泽化、地面沉降、滑坡等问题&#xff0c;影响当地自然环境和生活用水。 随着物联网通信技术的发展以及国家水资源管理的…

JavaScript (WebAPI)

目录 一、DOM 1. DOM树结构&#xff1a; 2. 重要概念 3. DOM 的工作流程 二、获取/操作元素 1. 获取 ① 获取单个元素 ② 获取所有元素 2. 操作 1. 获取/修改元素内容 3. 案例 三、新增元素 1. 创建元素节点 2. 插入节点到 DOM树 四、删除元素 一、DOM DOM 全…

Photoshop简单案例(8)——利用文字工具修改图片上文字

目录一、项目介绍二、原图上有要替换的文字2.1 方法1——利用修补工具修改2.2 方法2——利用移动工具&#xff08;推荐&#xff09;2.3 效果演示三、原图上没有要替换的文字一、项目介绍 本文介绍利用PhotoShop修改图片上的文字。修改下图图片中的学号。 二、原图上有要替换…

【HBU】2022秋线上作业-第五次-有关树的判断选择

判断题&#xff1a; 1. 一棵有124个结点的完全二叉树&#xff0c;其叶结点个数是确定的。 √ 高度为n的完全二叉树的结点数为2ⁿ-1 124位于64-1~128-1之间&#xff0c;所以这棵树的高度是7&#xff0c;前六层是满的有63个&#xff0c;第7层有124-6361个 64-613 第6层有…

使用Electron打包React项目

1、下载Electron Electron中文官网地址&#xff1a;https://www.electronjs.org/zh/docs/latest/ Electron下载如果单纯使用npm的话&#xff0c;会出现n多问题 所以建议使用国内的淘宝镜像 npm config set registry https://registry.npmmirror.com/然后下载 cnpm install -…

LeetCode 81. 搜索旋转排序数组 II

&#x1f308;&#x1f308;&#x1f604;&#x1f604; 欢迎来到茶色岛独家岛屿&#xff0c;本期将为大家揭晓LeetCode 81. 搜索旋转排序数组 II&#xff0c;做好准备了么&#xff0c;那么开始吧。 &#x1f332;&#x1f332;&#x1f434;&#x1f434; 一、题目名称 LeetC…

年后准备换工作的软件测试工程师们,你准备好了吗?

需要严肃说明的是&#xff1a;面试题库作为帮助大家准备面试的辅助资料&#xff0c;但是绝对不能作为备考唯一途径&#xff0c;因为面试是一个考察真实水平的&#xff0c;不是背会了答案就可以的&#xff0c;需要你透彻理解的&#xff0c;否则追问问题答不出来反而减分&#xf…

什么是dapp?如何在web中开发dapp?

web3 “Web3.0”是对“Web2.0”的改进&#xff0c;在此环境下&#xff0c;用户不必在不同中心化的平台创建多种身份&#xff0c;而是能打造一个去中心化的通用数字身份体系&#xff0c;通行各个平台。更像是一种概念吧。 区块链 区块链&#xff08;Blockchain&#xff09;是由…

54-64-k8s-集群监控-高可以用集群-交付部署

54-k8s-集群监控-高可以用集群-交付部署 k8s集群监控 1、概述 一个好的系统&#xff0c;主要监控以下内容 集群监控 节点资源利用率节点数运行Pods Pod监控 容器指标应用程序【程序占用多少CPU、内存】 2、监控平台 使用普罗米修斯【prometheus】 Grafana 搭建监控平台…

JS实现鼠标悬停变色

JS实现鼠标悬停变色 案例池子&#xff1a; JS实现鼠标悬停变色 JavaScript中的排他算法实现按钮单选 JavaScript中的localStorage JavaScript中的sessionStorage JavaScript实现网页关灯效果 JavaScript实现一段时间之后关闭广告 JavaScript实现按键快速获取输入框光标 …

第二证券|紧盯“有诺不行”隐疾 补齐上市公司高质量发展“短板”

有诺不可”的典型事例 “言而有信”是上市公司高质量开展的重要环节。近日&#xff0c;证监会印发的《推动提高上市公司质量三年举动计划&#xff08;2022-2025&#xff09;》&#xff08;下称《举动计划》&#xff09;提出&#xff0c;将着力处理管理领域杰出问题&#xff0c…

(Java)Thymeleaf学习笔记——动力节点

前言 学SpringMVC找课程时就了解到要学习thymeleaf这种Java模板引擎&#xff0c;但本着不用不学的原则就直接跳过&#xff0c;当实践第一个SpringMVC程序helloworld&#xff0c;遇见了thymeleaf&#xff0c;那么就先解决 &#x1f4a1;thymeleaf 知识点&#xff0c;再来学习Sp…

CSS新增样式----圆角边框、盒子阴影、文字阴影

在CSS中新增了三个样式&#xff0c;分别是圆角边框&#xff0c;盒子阴影&#xff0c;文字阴影。 初识圆角边框&#xff1a; border-radius属性用于设置元素的外边框圆角 语法如下&#xff1a; border-radius:length;原理如下&#xff1a; [椭]圆与边框的交集形成圆角效果。…

档案知识:声像档案的数字化处理与保存

声像档案是档案家族中较晚出现的成员&#xff0c;主要包括音像资料、图像资料、图片等&#xff0c;伴随着当今科技的发展进步&#xff0c;声像档案的数字化管理正逐步替代传统声像档案的管理方式&#xff0c;成为当前的发展主流。 虽然声像档案相较于传统文字档案&#xff0c;…

GFS分布式文件系统

GFS分布式文件系统 什么是GFS分布式文件系统 GFS&#xff08;GlusterFS&#xff09; 是一个开源的分布式文件系统。 由存储服务器、客户端以及NFS/Samba 存储网关&#xff08;可选&#xff0c;根据需要选择使用&#xff09;组成。 没有元数据服务器组件&#xff0c;这有助于提…

黑金ZYNQ7100配置HDMI驱动并测试

Linux系统移植系列 Linux系统移植专栏地址 https://blog.csdn.net/qq_41873311/category_12127932.html 一个写了五篇博客&#xff0c;成功在黑金ZYNQ7100搭建了属于我自己的Linux系统 但是缺少显示模块&#xff0c;所以本文就配置个HDMI驱动来完成图像的显示 环境 hdf设计…