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

相关推荐

  1. Python学习笔记--matplotlib.pyplot绘图技巧总结

    2024-04-12 09:12:02       13 阅读
  2. Python学习-Property详解

    2024-04-12 09:12:02       17 阅读
  3. Python学习-Pandas详解

    2024-04-12 09:12:02       16 阅读
  4. Python学习-描述符详解

    2024-04-12 09:12:02       19 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-12 09:12:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-12 09:12:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-12 09:12:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-12 09:12:02       20 阅读

热门阅读

  1. Django域名根目录文件验证

    2024-04-12 09:12:02       12 阅读
  2. VSCode 作者插件大全

    2024-04-12 09:12:02       14 阅读
  3. html单页使用vue

    2024-04-12 09:12:02       12 阅读
  4. 成为一名程序员:兴趣与职业发展的交汇点

    2024-04-12 09:12:02       13 阅读
  5. 一探究竟:选择排序原理、实现与应用分析

    2024-04-12 09:12:02       16 阅读
  6. linux c多线程简单队列实现

    2024-04-12 09:12:02       14 阅读
  7. 嵌入式之面向对象篇(四)

    2024-04-12 09:12:02       15 阅读
  8. 2812: 【算法思想】【双指针】最小差

    2024-04-12 09:12:02       13 阅读
  9. 【class1】python基础

    2024-04-12 09:12:02       13 阅读
  10. Hystrix 简介:容错保护的利器及使用方法简介:

    2024-04-12 09:12:02       14 阅读
  11. 理解ReAct的核心思想

    2024-04-12 09:12:02       14 阅读