Python学习之-matplotlib详解

前言:
Matplotlib 是一个 Python 的图表绘制库,广泛用于生成各种静态、动态和交互式的图表。它能够创建线图、散点图、条形图、饼图、直方图、误差线图、箱型图、热图、子图网络、散点矩阵等图表。

安装 Matplotlib:

pip install matplotlib

如果安装失败也可使用国内源来安装:

pip install matplotlib -i https://mirrors.aliyun.com/pypi/simple/

常用参数解释:
在 Matplotlib 中,图表的窗体(整个图像)称为 Figure,而窗体中的每一个独立的图表区域称为 Axes(轴域)。一个 Figure 中可以包含多个 Axes,但是一个 Axes 只能在一个 Figure 中。下面是对 Matplotlib 中 Axes 以及其他参数的一些说明:

Figure:是 Matplotlib 中图表的顶级容器。它包含了图表中的所有元素。

Axes(轴域):轴域(Axes)是图表的核心部分。一个Axes对象代表图表中的一个绘图区域,并包含两个(或三个用于3D图)坐标轴(Axis对象),这些坐标轴负责数据的定位,它是图像的一个区域,可以在此区域中绘制各种图表。Axes 对象提供了大量方法,例如 .plot(), .scatter(), .bar() 等,用于创建各种图表。
创建轴域: add_axes()方法可以在图形中添加一个轴域,通常需要传入一个列表参数:[left, bottom, width, height],这些值都是在 0 到 1 范围内,代表着相对于整个图形的位置和大小。

fig = plt.figure()
ax1 = fig.add_axes([0.1, 0.1, 0.8, 0.8])  # 主轴域
ax2 = fig.add_axes([0.2, 0.6, 0.3, 0.2])  # 嵌入的小轴域

Axis(轴):是指图表的 x 轴和 y 轴,分别控制图表的水平和垂直方面。它们负责设置图表的限制、生成刻度和刻度标签。
轴标题和标签: 轴域上可以设置标题、X 轴标签和 Y 轴标签:

ax1.set_title('Main Plot')
ax1.set_xlabel('X Axis')
ax1.set_ylabel('Y Axis')

Tick:刻度是轴上的标记,表示特定的数据点。刻度分为主刻度和副刻度,每个都有其对应的标签。
刻度和刻度标签: 可以定制轴域上的刻度位置和刻度标签:

ax1.set_xticks([1, 2, 3, 4])
ax1.set_xticklabels(['one', 'two', 'three', 'four'])

Spine:是图表的边框,通常一个图表有四个边框:上、下、左、右。

# 获取当前轴域的所有 'spine'
spines = ax.spines

# 设置右侧和顶部 'spine' 不可见
spines['right'].set_visible(False)
spines['top'].set_visible(False)

# 将底部 'spine' 移动到 y = 0 处
spines['bottom'].set_position(('data', 0))

# 将左侧 'spine' 改成红色且加粗
spines['left'].set_color('red')
spines['left'].set_linewidth(2)

Grid:网格线,可以帮助用户识别图中的数据点。
网格: 可以开启或者定制网格的显示:

ax1.grid(True)

Legend(图例):解释图表中各个数据系列的标识,通常用颜色或图案区分。

ax1.plot(x, y, label='Line 1')
ax1.plot(x, y*2, label='Line 2')
ax1.legend(loc='best')  # 自动选择最佳位置显示图例

Title(标题):图表的标题,通常位于图表的顶部。

ax1.set_title('Sine Wave')  # 设置标题
ax1.set_xlabel('X-axis')    # 设置X轴标签
ax1.set_ylabel('Y-axis')    # 设置Y轴标签

1 应用示例 :

#!/usr/bin/env python
# coding=utf-8
"""
# @Time    : 2024/4/11 23:00
# @Author  : Summer
# @File    : matplotlib.py
# @describe:
"""

import matplotlib.pyplot as plt
import numpy as np

# 创建一个Figure对象
fig = plt.figure(figsize=(8, 6))

# 使用 add_subplot 方法向 Figure 添加 Axes 对象
ax1 = fig.add_subplot(2, 2, 1)  # 第一个轴域(位于2行2列的网格的第1个位置)
ax2 = fig.add_subplot(2, 2, 2)  # 第二个轴域(位于2行2列的网格的第2个位置)
ax3 = fig.add_subplot(2, 2, 3)  # 第三个轴域(位于2行2列的网格的第3个位置)

# 在第一个轴域中绘制一个线图
x = np.arange(0, 10, 0.2)
y = np.sin(x)
ax1.plot(x, y)
ax1.set_title('Sine Wave')  # 设置标题
ax1.set_xlabel('X-axis')    # 设置X轴标签
ax1.set_ylabel('Y-axis')    # 设置Y轴标签

# 设置第二个轴域的柱状图
categories = ['A', 'B', 'C', 'D']
values = [10, 20, 15, 30]
ax2.bar(categories, values)
ax2.set_title('Bar Chart')

# 设置第三个轴域的散点图
x = np.random.rand(50)
y = np.random.rand(50)
ax3.scatter(x, y)
ax3.set_title('Scatter Plot')

plt.tight_layout()  # 调整子图参数,使之填充整个图像区域
plt.show()

在这里插入图片描述
在这个例子中,每个轴域都有自己的图表类型和标题,并且轴域能够被单独控制和定制。使用轴域对象的方法,我们可以精确地添加和控制图表的属性,如标题、网格线、刻度等。通常,你会发现自己需要根据你的数据和展示需求来调整诸如布局、标签位置、轴范围、颜色、图表类型等多个参数。
此外,Matplotlib 提供了大量的绘图方法和定制选项。以下是一些常见的图表类型及其用法示例:

2 线图(Line plot):

绘制线形图表来表示数据点之间的连线。

#!/usr/bin/env python
# coding=utf-8
"""
# @Time    : 2024/4/11 23:00
# @Author  : Summer
# @File    : matplotlib.py
# @describe:
"""

import matplotlib.pyplot as plt


x = [1, 2, 3, 4]
y = [10, 20, 25, 30]
plt.plot(x, y)
plt.show()


在这里插入图片描述

3 散点图(Scatter plot):

用来观察两个变量的关系,显示为一组点。

#!/usr/bin/env python
# coding=utf-8
"""
# @Time    : 2024/4/11 23:00
# @Author  : Summer
# @File    : matplotlib.py
# @describe:
"""

import matplotlib.pyplot as plt
import numpy as np

x = np.random.rand(50)
y = np.random.rand(50)
plt.scatter(x, y)
plt.show()

在这里插入图片描述

4 条形图(Bar plot):

用来表示分类变量数据,通常用于比较每个类别。
在这里插入图片描述

5 直方图(Histogram):

用于展示数据分布情况的图表,通常是对数据进行BINNING然后统计频次。
在这里插入图片描述

6 饼图(Pie chart):

饼图用于显示数据组成的占比。

#!/usr/bin/env python
# coding=utf-8
"""
# @Time    : 2024/4/11 23:00
# @Author  : Summer
# @File    : matplotlib.py
# @describe:
"""

import matplotlib.pyplot as plt
import numpy as np

sizes = [25, 35, 20, 20]
labels = ['Category A', 'Category B', 'Category C', 'Category D']
plt.pie(sizes, labels=labels, autopct='%1.1f%%')
plt.axis('equal')  # 等比例显示
plt.show()

在这里插入图片描述

子图(Subplots):

在同一窗口中创建多个图表。

#!/usr/bin/env python
# coding=utf-8
"""
# @Time    : 2024/4/11 23:00
# @Author  : Summer
# @File    : matplotlib.py
# @describe:
"""

import matplotlib.pyplot as plt
import numpy as np

x = np.random.rand(50)
y = np.random.rand(50)

# 创建一个 2x1 的子图结构
plt.subplot(2, 1, 1)
plt.plot(x, y, 'r--')  # 红色虚线
plt.subplot(2, 1, 2)
plt.plot(y, x, 'g*-')  # 绿色星状线
plt.show()

在这里插入图片描述

总结:

用途广泛: Matplotlib 被广泛用于数据可视化,支持多种图表类型,例如线图 (line plots)、散点图(scat-ter plots)、条形图 (bar charts)、饼图 (pie charts)、直方图 (histograms)、箱线图 (box plots)、热图 (heatmaps)、子图 (subplots) 等。
架构组成: 主要由四个层构成,即脚本层(pyplot API)、艺术家层(Artist API)、后端层(Backend Layer)和文档对象模型层(Document object model)。
功能强大: 支持图表的高度定制,包括坐标轴、图例、标题、刻度标签、样式、颜色、网格以及图表注释等。
灵活性: 可以对图表元素进行细粒度控制,也提供了较为简单的命令式接口用于快速绘制。
兼容性: 整合了许多的第三方包和框架,例如 Pandas、SciPy 和 scikit-learn。
扩展性: 可以扩展到其他库中,如 Seaborn 和 ggplot,用于更高级的统计图表绘制。
图像格式: 支持多种输出格式,如 PNG、PDF、SVG、EPS 以及 JPEG 等。
交互性: 提供了事件处理机制,可以创建交互式图表和动画。
总的来说,Matplotlib 是 Python 中一个功能全面且广泛被使用的绘图库,适合用在科学计算、数据分析、人工智能和机器学习等领域。然而,针对一些特定的应用场景,如 Web 集成或实时更新的大数据集,可能需要考虑其他如 Bokeh 或 Plotly 这类更现代化的图表库。为了深入理解和掌握 Axes 对象,查看 Matplotlib 官方文档中的 Axes API 部分是非常有帮助的:https://matplotlib.org/stable/api/axes_api.html

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RocketMQ的docker安装和SpringBoot的集成

1.Docker安装 1.1创建docker-compose.yml文件 version: 3.5 services:rmqnamesrv:image: foxiswho/rocketmq:servercontainer_name: rmqnamesrvports:- 9876:9876networks:rmq:aliases:- rmqnamesrvrmqbroker:image: foxiswho/rocketmq:brokercontainer_name: rmqbrokerports…

docker完美安装分布式任务调度平台XXL-JOB

分布式任务调度平台XXL-JOB 1、官方文档 自己看 https://www.xuxueli.com/xxl-job/#1.1%20%E6%A6%82%E8%BF%B0 2、使用docker部署 本人使用的腾讯云,安装docker暴露一下端口,就很舒服的安装这个服务了。 docker pull xuxueli/xxl-job-admin:2.4.03…

ELFK的部署

目录 一、ELFK(FilebeatELK) 1. Filebeat的作用 2. ELFK工作流程 3. ELFK的部署 3.1 服务器配置 3.2 服务器环境 3.3 安装filebeat 3.4 修改filebeat主配置文件 3.5 在logstash组件所在节点(apache节点)上新建一个logstas…

关闭笔记本自带的键盘

目录 一、问题 二、方法 【方法一】 【方法二】 一、问题 笔记本自带的键盘上的个别按键又坏了,可能是因为使用电脑时,最先坏的几个按键那里温度比较高,久而久之就烧坏了吧。距离上次更换新键盘才差不多一年,所以不打算再买新…

librosa.beat.beat_track()报错解决记录

在使用librosa.beat.beat_track(yy, srsr)时报错:AttributeError: module scipy.signal has no attribute hann,很奇怪的问题,大家好像都没有遇到这个错误: 很奇怪,这个hann明明是scipy.signal.windows里面的。。虚拟环…

开发日志2024-04-11

开发日志2024/04/11 1、会员/普通用户预约完成后,技师对应的积分添加预约完成的项目价格添加到统计表的业绩字段中,同时对应的服务次数字段1 实现代码: 前端 shHandler(){this.$confirm(确定操作?, "提示", {confirmButtonText…

数据仓库的ELT/ETL

ETL 和 ELT 有很多共同点,从本质上讲,每种集成方法都可以将数据从源端抽取到数据仓库中,两者的区别在于数据在哪里进行转换。 01 ETL ETL – 抽取、转换、加载 从不同的数据源抽取信息,将其转换为根据业务定义的格式&#xff0…

如何实现word一键注音?给一篇word文章快速注音的方法

在日常生活和工作中,我们经常需要处理各种文档,其中不乏包含大量生僻字或需要标注拼音的文本。手动为每一个字添加拼音不仅效率低下,而且容易出错。那么,有没有一种方法可以实现Word文档的一键注音呢?本文将为大家详细…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之九 简单视频卡通画效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之九 简单视频卡通画效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之九 简单视频卡通画效果 一、简单介绍 二、简单视频卡通画效果实现原理 三、简单视频卡通画效果…

Python处理PDF:在PDF文档中插入页眉和页脚

在处理篇幅较长、结构复杂的PDF文档时,页眉和页脚的设计与插入就显得尤为重要。它们不仅扮演着美化文档、提升专业度的角色,更承担了导航指引、信息标注的重要功能。 页眉通常用于展示文档的标题或章节名称,有助于读者在翻阅过程中迅速定位所…

构建强大的物联网平台系统架构:关键步骤与最佳实践

随着物联网(IoT)技术的快速发展和广泛应用,越来越多的企业开始意识到搭建一个强大而可靠的物联网平台系统架构的重要性。一个完善的物联网平台可以帮助企业高效地管理和监控各种连接设备,并实现数据的收集、处理和分析。在本文中&…

【python】图像边缘检测

一、代码 import pyautogui import cv2 import numpy as np import time import os # 获取屏幕尺寸 screen_width, screen_height pyautogui.size() screen_size (1920, 1080) # cv2.namedWindow("Screen Capture", cv2.WINDOW_NORMAL) # cv2.resizeWindow("…

jetbrains全家桶历史版本下载(IDEA/PyCharm...)

IDEA: 其他版本 - IntelliJ IDEA (jetbrains.com)https://www.jetbrains.com/zh-cn/idea/download/other.html PyCharm: 其他版本 - PyCharm (jetbrains.com)https://www.jetbrains.com/zh-cn/pycharm/download/other.html Goland: 其他版本 - GoLand (jetbrain…

OpenHarmony4.0源码解析之媒体框架

媒体框架简介 媒体框架 multimedia_player_framework 主要提供音视频的录制与播放功能。 框架简介 从框架图中可以看出,媒体框架的主要工作模式为通过 Gstreamer 的插件自动化注册及插件组合功能,将其余媒体播放相关的框架功能插件化,配合 …

MAC M1版IDEA热部署JRebel

1、在idea里面安装jrebel插件 2、下载激活工具:ReverseProxy_darwin_amd64 下载地址(Mac早期用户使用Safari下载,不要用Chrome,否则下载之后会把.dms后缀名去掉) 特别注意:M1用户请使用下面的下载&#xff…

基于Vue的宠物领养系统的设计与实现(论文+源码)_kaic

目 录 摘 要 ABSTRACT 1 引言 1.1 课题背景 1.2 设计原则 1.3 论文组织结构 2 系统关键技术 2.1 JSP技术 2.2 JAVA技术 2.3 B/S结构 2.4 MYSQL数据库 3 系统分析 3.1 可行性分析 3.1.1 操作可行性 3.1.2 经济可行性 3.1.3 技术可行性 3.1.4 法律可行性 3.2 系统功能分析 3.3…

RabbitMQ消息模型之Simple消息模型

simple消息模型 生产者 package com.example.demo02.mq.simple;import com.example.demo02.mq.util.ConnectionUtils; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection;import java.io.IOException;/*** author Allen* 4/10/2024 8:07 PM* versi…

C语言 | Leetcode C语言题解之第21题合并两个有序链表

题目: 题解: /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/typedef struct ListNode ListNode; struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {/…

最新Android Studio导入aar包的方法

以前的方式,目前看网上也大多数都是这种方式,导致我本地加的时候一直有问题 但是这样都无法sync以及编译通过,因为方式已经变了 1:将aar文件复制到MyApplication\app\libs下 2:在MyApplication\app\build.gradle下添加…

JS-28-AJAX

一、AJAX的定义 AJAX不是JavaScript的规范,它只是一个哥们“发明”的缩写:Asynchronous JavaScript and XML,意思就是用JavaScript执行异步网络请求。 如果仔细观察一个Form的提交,你就会发现,一旦用户点击“Submit”…