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 pltx = [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 npx = 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 npsizes = [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 npx = 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

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

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

相关文章

KKVIEW远程远程访问家里电脑

远程访问家里电脑:简易指南与价值所在 在数字化时代,电脑已成为我们日常生活和工作中不可或缺的工具。有时,我们可能在外出时急需访问家中电脑里的某个文件或应用,这时,远程访问家里电脑就显得尤为重要。本文将简要介…

计算机网络——交换机和路由器

目录 前言 引言 交换机是用来做什么的? 与路由器有什么区别? 网关 子网掩码 网关、路由 前言 本博客是博主用于复习计算机网络的博客,如果疏忽出现错误,还望各位指正。 这篇博客是在B站掌芝士zzs这个UP主的视频的总结&am…

Ubuntu下配置Android NDK环境

Android-NDK的下载 下载Android-NDK wget -c http://dl.google.com/android/ndk/android-ndk-r10e-linux-x86_64.bin 执行bin文件(即解压) ./android-ndk-r10c-linux-x86_64.bin Android-NDK的配置 要想使用Android-NDK,还需要进行环境变量…

C/C++基础----判断和循环

判断 if-elseif-else判断 语句&#xff1a; 条件使用之前的逻辑运算符或者关系运算符 if(条件1){条件1成立时内容 }else if(条件2){条件2成立时内容 }else{所有条件不成立时内容 }#include <iostream>using namespace std;int main() {int age 10;if (age > 18) {c…

ShardingSphere再回首

概念&#xff1a; 连接&#xff1a;通过协议 方言及库存储的适配&#xff0c;连接数据和应用&#xff0c;关注多模数据苦之间的合作 增量&#xff1a;抓取库入口流量题提供重定向&#xff0c; 流量变形(加密脱敏)/鉴权/治理(熔断限流)/分析等 可插拔&#xff1a;微内核 DDL:cr…

OSPF 开放式最短路径优先协议

目录 技术产生原因&#xff1a;因为RIP存在不足 OSPF优点&#xff1a; RIPV2和OSPFV2比较&#xff1a; 相同点&#xff1a; 不同点&#xff1a; OSPF的结构化部署 --- 区域划分 区域划分的主要目的&#xff1a; 区域边界路由器 --- ABR &#xff1a; 区域划分的要求&am…

PyCharm Pro 2024:卓越的Python编辑开发工具,适用于Mac与Windows平台

PyCharm Pro 2024是一款专为Python开发者设计的强大编辑开发工具&#xff0c;无论是Mac还是Windows用户&#xff0c;都能从中受益良多。该软件凭借其出色的性能、丰富的功能和卓越的用户体验&#xff0c;成为Python编程界的翘楚。 作为一款高效的Python编辑器&#xff0c;PyCh…

【MySQL】索引篇

SueWakeup 个人主页&#xff1a;SueWakeup 系列专栏&#xff1a;学习技术栈 个性签名&#xff1a;保留赤子之心也许是种幸运吧 本文封面由 凯楠&#x1f4f8;友情提供 目录 本系列传送门 1. 什么是索引 2. 索引的特性 3. 索引的分类 4. 索引的优点及缺点 优点 缺点 5.…

绝地求生:AUG爆裂弹球黑货箱:街机动漫风格大家会喜欢吗?

大好&#xff0c;我闲游盒&#xff01; 4.10更新后&#xff0c;AUG的新成长型也出来了&#xff0c;更新后我觉得AUG变好用了一点&#xff0c;不知道大家有没有感觉出来&#xff1f; 宝箱概率 本期主角 AUG-爆裂弹球&#xff08;紫色配粉红色&#xff09; 本次的AUG我才升到5级…

arm内核驱动-中断

先介绍个东西 ctags 这个工具可以像keil一样在工程里查找跳转&#xff0c;帮我们找到我们想要的东西。 安装教程可以找到&#xff0c;这里只讲怎么用。 在工程目录&#xff08;包含所有你会用到的头文件等&#xff09;下&#xff0c;先加载这个命令&#xff0c;可能要等待…

每日一题---OJ题: 链表的回文结构

片头 嗨! 小伙伴们,大家好! 今天我们来一起学习这道OJ题--- 链表的回文结构 嗯...这道题好像不是很难,我们来分析分析 举个例子: 我们可以看到,上图中的两个链表都是回文结构: 即链表的回文结构是指一个链表中的结点值从前往后读和从后往前读都是一样的结构。也就是说&#xf…

vue表格操作列,按钮太多显示... 点击后悬浮显示全部按钮

效果: 分析原理: 一共就三步,仔细看看很简单,位置要加对,代码结构下边有demo 代码结构demo: <el-table-columnlabel"操作"align"center"fixed"right"show-overflow-tooltip><template slot-scope"scope"><el-buttonsi…