Python库学习(十):Matplotlib绘画库

news2024/11/19 12:33:18

1. 介绍

Matplotlib 是一个用于绘制图表和可视化数据的 Python 库。它提供了丰富的绘图工具,可以用于生成各种静态、交互式和动画图表。Matplotlib 是数据科学、机器学习和科学计算领域中最流行的绘图库之一。

1.1 关键特性

以下是 Matplotlib 的一些关键特性:

  • 简单易用: Matplotlib 提供了简单而直观的 API,使得用户能够轻松创建各种类型的图表。

  • 多种绘图类型: 支持绘制各种类型的图表,包括线图、散点图、柱状图、饼图、等高线图、3D 图表等。

  • 自定义性强: 用户可以轻松地自定义图表的外观和样式,包括颜色、线型、标签、标题等。

  • 支持 LaTex: 支持使用 LaTeX 渲染文本,使得图表标签和注释可以具有高质量的数学表达式。

  • 交互式图表: Matplotlib 可以嵌入到交互式环境中,如 Jupyter Notebook,支持交互式数据探索和动态更新。

  • 支持多种输出格式: 可以将图表保存为多种格式,如 PNG、PDF、SVG、EPS 等。

  • 对象导向: Matplotlib 的图表是通过对象导向的方式创建的,这意味着用户可以直接操作图表的元素,使得定制化和复杂的图表更加容易。

  • 内置样式和颜色映射: 提供了内置的样式表和颜色映射,使得用户可以轻松地应用一致的风格和颜色。

  • 复杂图表和子图: 支持创建复杂的图表布局和多子图,适用于需要展示多个数据视图的场景。

  • 跨平台: 可以在多个操作系统上运行,包括 Windows、Linux 和 macOS

1.2 其他介绍

Github(截止当前 18.2K):https://github.com/matplotlib/matplotlib

  • 官方文档: https://matplotlib.org/stable/users/explain/quick_start.html
  • 中文文档: https://matplotlib.net/stable/users/getting_started/index.html

2. 安装&升级

2.1 安装

# pip方式安装
$ pip install matplotlib

# conda方式安装
$ conda install matplotlib

2.2 升级

# pip方式升级
$ pip install --upgrade matplotlib

# conda方式升级
$ conda update matplotlib

3. 绘图风格

3.1 对象风格

使用面向对象的风格画图,首先要创建画布(大容器),然后在画布中填充子图信息(小容器)

import matplotlib.pyplot as plt
import numpy as np

if __name__ == '__main__':
    # 设置字体以便正确显示中文
    plt.rcParams['font.sans-serif'] = ['FangSong']
    # 正确显示连字符
    plt.rcParams['axes.unicode_minus'] = False
    # --------------- 创建画布 ---------------
    fig = plt.figure()
    # 设置画布大小
    fig.set_size_inches(75)
    # 设置画布颜色
    fig.set_facecolor('ivory')

    # --------------- 创建子图 ---------------
    # 设置子图位置
    subImg = fig.add_axes([0.10.10.80.8])
    # 设置x、y轴数据
    x = np.linspace(01020)
    y1 = np.power(x, 2)
    y2 = x * 10
    
    # 画线
    subImg.plot(x, y1, 'r', ls='-', linewidth=2, label='$x^2$')
    subImg.plot(x, y2, 'b', ls='--', linewidth=2, label='$x*10$')

    # 添加文本标志
    subImg.text(3.47.5r'$x^2$', fontsize=12)
    subImg.text(17.5r'$x*10$', fontsize=12)

    # 设置子图标题
    subImg.set_title("子图A标题", fontdict={'size'16})

    subImg.legend(loc='upper left')  # 生成图例
    # # 设置x、y轴标志
    subImg.set_xlabel('X轴', fontdict={'size'14})
    subImg.set_ylabel('Y轴', fontdict={'size'14})
    # 显示图片
    plt.show()
alt

3.2 API风格

除此上文风格,Matplotlib还提供一种类MATLAB风格的API,这种使用方式没有画布和子图的概念,直接调用函数即可绘图和显示。

实现上面的图片效果代码如下:

import matplotlib.pyplot as plt
import numpy as np

if __name__ == '__main__':
    # 设置字体以便正确显示中文
    plt.rcParams['font.sans-serif'] = ['FangSong']
    # 正确显示连字符
    plt.rcParams['axes.unicode_minus'] = False

    # 设置x、y轴数据
    x = np.linspace(01020)
    y1 = np.power(x, 2)
    y2 = x * 10

    # 画线
    plt.plot(x, y1, 'r', ls='-', linewidth=2, label='$x^2$')
    plt.plot(x, y2, 'b', ls='--', linewidth=2, label='$x*10$')

    # 添加文本标注
    plt.text(3.47.5r'$x^2$', fontsize=12)
    plt.text(17.5r'$x*10$', fontsize=12)
    # 设置子图标题
    plt.title("示例标题", fontdict={'size'16})
    # 生成图例
    plt.legend(loc='upper left')
    # 设置x、y轴标志
    plt.xlabel('X轴')
    plt.ylabel('Y轴')

    # 显示图片
    plt.show()

4. 快速绘图

4.1 折线图

  • plt.plot() : 主要用于绘制折线图的主要函数之一。
import matplotlib.pyplot as plt
import numpy as np

if __name__ == '__main__':
    # 设置字体以便正确显示中文
    plt.rcParams['font.sans-serif'] = ['FangSong']
    # 正确显示连字符
    plt.rcParams['axes.unicode_minus'] = False

    # 设置x、y轴数据
    x = np.linspace(01020)
    y1 = np.power(x, 2)
    y2 = x * 10

    # 图一位置,subplot(1, 2, 1) 代表画布是1行2列,当前图位于第1列
    plt.subplot(121)
    plt.title("图一")
    plt.plot(x, y1)

    # 图一位置,subplot(1, 2, 2) 代表画布是1行2列,当前图位于第2列
    plt.subplot(122)
    plt.title("图二")
    plt.plot(x, y2)
    # 显示图片
    plt.show()
alt

4.2 曲线图

严格来说,plot( )函数绘制的是折线图而非曲线图,因为该函数只是将顺序相邻的点以直线连接,如想画曲线图,推荐使用semilogx( )、semilogy( )和loglog( )等函数。

import matplotlib.pyplot as plt
import numpy as np

# 设置字体以便正确显示中文
plt.rcParams['font.sans-serif'] = ['FangSong']
# 正确显示连字符
plt.rcParams['axes.unicode_minus'] = False

if __name__ == '__main__':
    # 生成示例数据
    x = np.linspace(110100)
    y = np.exp(x)

    # 创建画布和子图,1行3列
    fig, (ax1, ax2, ax3) = plt.subplots(13, figsize=(155))

    # 使用semilogx()在第一个子图中绘制对数x轴的折线图
    ax1.semilogx(x, y, label='对数x轴折线图')
    ax1.set_title('semilogx() 示例')
    ax1.set_xlabel('对数X轴')
    ax1.set_ylabel('Y轴')
    ax1.legend()

    # 使用semilogy()在第二个子图中绘制对数y轴的折线图
    ax2.semilogy(x, y, label='对数y轴折线图')
    ax2.set_title('semilogy() 示例')
    ax2.set_xlabel('X轴')
    ax2.set_ylabel('对数Y轴')
    ax2.legend()

    # 使用loglog()在第三个子图中绘制对数坐标轴的折线图
    ax3.loglog(x, y, label='对数坐标轴折线图')
    ax3.set_title('loglog() 示例')
    ax3.set_xlabel('对数X轴')
    ax3.set_ylabel('对数Y轴')
    ax3.legend()

    # 调整子图之间的距离
    plt.tight_layout()

    # 显示图表
    plt.show()
alt

4.3 柱状图

  • plot.bar(): 用来绘制垂直柱状图
  • plot.barh(): 用来绘制水平柱状图
import matplotlib.pyplot as plt

# 设置字体以便正确显示中文
plt.rcParams['font.sans-serif'] = ['FangSong']
# 正确显示连字符
plt.rcParams['axes.unicode_minus'] = False

if __name__ == '__main__':
    # 生成示例数据
    names = ['孙悟空''猪八戒''唐僧''沙僧']
    values = [36247545]
    plt.title("年龄分布图")

    # 创建画布和子图
    fig, (ax1, ax2) = plt.subplots(12, figsize=(125))

    # 使用plot.bar()在第一个子图中绘制垂直条形图
    ax1.bar(names, values, color='blue')
    ax1.set_title('垂直条形图示例')
    ax1.set_xlabel('姓名')
    ax1.set_ylabel('年龄')

    # 使用plot.barh()在第二个子图中绘制水平条形图
    ax2.barh(names, values, color='green')
    ax2.set_title('水平条形图示例')
    ax2.set_xlabel('年龄')
    ax2.set_ylabel('姓名')

    # 调整子图之间的距离
    plt.tight_layout()

    # 显示图表
    plt.show()
alt

4.4 散点图

scatter() 函数用于绘制散点图,散点图是一种展示两个变量之间关系的常见图表类型。每个点的位置由两个变量的值决定,横轴表示一个变量,纵轴表示另一个变量。

1. 参数说明
scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, edgecolors=None, *, plotnonfinite=False, data=None, **kwargs)
  • x, y: 必需,表示散点图上点的横坐标和纵坐标。
  • s: 用于指定散点的大小。可以是一个标量,表示所有点的大小相同;也可以是一个数组,表示每个点的大小。
  • c: 用于指定散点的颜色。可以是一个标量,表示所有点的颜色相同;也可以是一个数组,表示每个点的颜色。此外,你还可以通过设置 c 参数为字符串值来表示使用预定义的颜色映射。
  • marker: 用于指定散点的标记样式,例如 'o' 表示圆点,'^' 表示三角形等。
  • cmap: 用于指定颜色映射,仅当 c 参数为数组时起作用。更多颜色参考文档: https://matplotlib.org/stable/users/explain/colors/colormaps.html
  • norm: 用于标准化颜色映射。
  • alpha: 用于指定散点的透明度,取值范围为 0(完全透明)到 1(完全不透明)。
  • linewidths: 用于指定散点边缘的线宽。
  • edgecolors: 用于指定散点边缘的颜色。
2. 代码示例
import matplotlib.pyplot as plt
import numpy as np

# 设置字体以便正确显示中文
plt.rcParams['font.sans-serif'] = ['FangSong']
# 正确显示连字符
plt.rcParams['axes.unicode_minus'] = False

if __name__ == '__main__':
    # 生成示例数据
    x = np.random.randn(50)
    y = np.random.randn(50)
    # 随机数,用于映射颜色
    color = 10 * np.random.rand(50)
    # 随机数表示点的面积
    area = np.square(30 * np.random.rand(50))
    plt.scatter(x, y, label="数据点", c=color, marker="o", s=area, cmap='flag', edgecolor='r')
    # 添加标题和标签
    plt.title("散点图示例")
    plt.xlabel("X轴")
    plt.ylabel("Y轴")
    # 显示图例
    plt.legend()
    # 显示图表
    plt.show()
alt

4.5 饼图

1. 参数说明
pie(
        x, explode=None, labels=None, colors=None, autopct=None,
        pctdistance=0.6, shadow=False, labeldistance=1.1,
        startangle=0, radius=1, counterclock=True, wedgeprops=None,
        textprops=None, center=(00), frame=False,
        rotatelabels=False, *, normalize=True, hatch=None, data=None)
  • x: 必需,表示每个部分的大小,可以是一个数组或一个标量。如果是一个数组,表示每个扇形的大小;如果是一个标量,表示所有扇形的大小相同。
  • explode: 用于指定哪些扇形被拉出。如果某个值大于0,表示对应索引的扇形会被拉出一定的距离。
  • labels: 扇形上显示的标签,可以是一个数组或 None。
  • colors: 扇形的颜色,可以是一个颜色列表,表示每个扇形的颜色;也可以是 None,表示使用默认颜色。
  • autopct: 控制在饼图上显示每个部分的百分比,可以是字符串格式化,例如 '%1.1f%%'。
  • pctdistance: 百分比标签与圆心的距离,取值范围为 [0, 1]。
  • shadow: 是否在饼图下方添加阴影。
  • labeldistance: 标签与圆心的距离,取值范围为 [0, 1]。
  • startangle: 饼图起始角度,按逆时针方向计算,0 度表示从正 x 轴开始。
  • radius: 饼图的半径。
  • counterclock: 是否按逆时针方向绘制饼图。
  • wedgeprops: 扇形的属性字典,用于设置扇形的样式,例如边界颜色、边界宽度等。
  • textprops: 标签的属性字典,用于设置标签的样式,例如字体大小、颜色等。
  • center: 饼图的中心坐标。
  • frame: 是否绘制一个带有刻度标签的坐标轴框架。
  • rotatelabels: 是否旋转标签。
  • normalize: 如果为 True,则将 x 归一化为百分比。
2.代码示例
import matplotlib.pyplot as plt

# 设置字体以便正确显示中文
plt.rcParams["font.sans-serif"] = ["FangSong"]
# 正确显示连字符
plt.rcParams["axes.unicode_minus"] = False

if __name__ == '__main__':
    # 示例数据
    labels = ['Go''PHP''C''Java''Python']
    sizes = [15519.52040.5]
    # 哪个闪现
    explode = (00.1000)
    # 使用pie()绘制饼状图
    plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90, explode=explode,
            colors=['gold''lightskyblue''lightcoral''lightgreen''purple'])

    # 添加标题
    plt.title('后端编程语言占比')

    # 显示图表
    plt.show()
alt

4.6 等值线图

import matplotlib.pyplot as plt
import numpy as np

# 设置字体以便正确显示中文
plt.rcParams["font.sans-serif"] = ["FangSong"]
# 正确显示连字符
plt.rcParams["axes.unicode_minus"] = False

if __name__ == '__main__':
    # 创建示例数据
    x = np.linspace(-55100)
    y = np.linspace(-55100)
    X, Y = np.meshgrid(x, y)
    Z = np.sin(np.sqrt(X ** 2 + Y ** 2))

    # 创建画布和子图
    fig, (ax1, ax2) = plt.subplots(12, figsize=(125))

    # ------------------------------ 图A-contour-填充示例 ----------------------------------
    contour_plot = ax1.contour(X, Y, Z, levels=20, cmap='viridis')
    fig.colorbar(contour_plot, label='Z值')
    ax1.set_title('等值线图示例')
    ax1.set_xlabel('X轴')
    ax1.set_ylabel('Y轴')

    # ------------------------------ 图B-contourf-填充示例 ----------------------------------
    contour_plot = ax2.contourf(X, Y, Z, levels=20, cmap='viridis')
    fig.colorbar(contour_plot, label='Z值')
    ax2.set_title('等值线图(填充)')
    ax2.set_xlabel('X轴')
    ax2.set_ylabel('Y轴')

    # 显示图表
    plt.show()
alt

4.7 矢量合成图

矢量合成图以箭头的形式绘制矢量,因此也被称为箭头图。矢量合成图以箭头的方向表示矢量的方向。

import matplotlib.pyplot as plt
import numpy as np

# 设置字体以便正确显示中文
plt.rcParams["font.sans-serif"] = ["FangSong"]
# 正确显示连字符
plt.rcParams["axes.unicode_minus"] = False

if __name__ == '__main__':
    # 创建两个矢量
    vector1 = np.array([32])
    vector2 = np.array([-14])

    # 计算矢量合成结果
    resultant_vector = vector1 + vector2

    # 创建图表和子图
    fig, ax = plt.subplots()

    # 绘制矢量1
    ax.arrow(00, vector1[0], vector1[1], head_width=0.2, head_length=0.2, fc='blue', ec='blue', label='矢量1')

    # 绘制矢量2
    ax.arrow(00, vector2[0], vector2[1], head_width=0.2, head_length=0.2, fc='red', ec='red', label='矢量2')

    # 绘制矢量合成结果
    ax.arrow(00, resultant_vector[0], resultant_vector[1], head_width=0.2, head_length=0.2, fc='green', ec='green',
             label='结果')

    # 设置坐标轴
    ax.set_xlim(-25)
    ax.set_ylim(-18)

    # 添加网格
    ax.grid(True)
    # 添加标签和标题
    ax.set_xlabel('X轴')
    ax.set_ylabel('Y轴')
    ax.set_title('矢量图示例')

    # 添加图例
    ax.legend()

    # 显示图表
    plt.show()
alt

本文由 mdnice 多平台发布

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

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

相关文章

23基于MATLAB的小波降噪,默认阈值消噪,强制消噪,给定软阈值消噪方法,数据直接替换后就可以跑。

基于MATLAB的小波降噪,默认阈值消噪,强制消噪,给定软阈值消噪方法,数据直接替换后就可以跑。 https://www.xiaohongshu.com/explore/652d57c600000

Leetcode刷题解析——904. 水果成篮

1. 题目链接:904. 水果成篮 2. 题目描述: 你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示,其中 fruits[i] 是第 i 棵树上的水果 种类 。 你想要尽可能多地收集水果。然而,农场的主…

vue 拿到数据后,没有重新渲染视图,nuxt.js拿到数据后,没有重新渲染视图,强制更新视图

以下为Vue2的解决方案 一、 Vue.set() 问:什么情况下使用? 答:如果你向响应式数据添加新的“属性”,理论上,一般情况下是没问题的,但是,如果你的级别比较深,又…

Py之trl:trl(一款采用强化学习训练Transformer语言模型和稳定扩散模型的全栈库)的简介、安装、使用方法之详细攻略

Py之trl:trl(一款采用强化学习训练Transformer语言模型和稳定扩散模型的全栈库)的简介、安装、使用方法之详细攻略 目录 trl的简介 1、亮点 2、PPO是如何工作的:PPO对语言模型微调三步骤,Rollout→Evaluation→Optimization trl的安装 t…

LeetCode 2 两数相加

题目描述 链接:https://leetcode.cn/problems/add-two-numbers/?envTypefeatured-list&envId2ckc81c?envTypefeatured-list&envId2ckc81c 难度:中等 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式…

软件设计之工厂方法模式

工厂方法模式指定义一个创建对象的接口,让子类决定实例化哪一个类。 结构关系如下: 可以看到,客户端创建了两个接口,一个AbstractFactory,负责创建产品,一个Product,负责产品的实现。ConcreteF…

基于ssm008医院门诊挂号系统+jsp【附PPT|开题|任务书|万字文档(LW)和搭建文档】

主要功能 后台登录:4个角色 管理员: ①个人中心、修改密码、个人信息 ②药房管理、护士管理、医生管理、病人信息管理、科室信息管理、挂号管理、诊断信息管理、病例库管理、开药信息管理、药品信息管理、收费信息管理 药房: ①个人中心、修…

CSS阶详细解析一

CSS进阶 目标:掌握复合选择器作用和写法;使用background属性添加背景效果 01-复合选择器 定义:由两个或多个基础选择器,通过不同的方式组合而成。 作用:更准确、更高效的选择目标元素(标签)。…

计算机算法分析与设计(11)---贪心算法(活动安排问题和背包问题)

文章目录 一、贪心算法概述二、活动安排问题2.1 问题概述2.2 代码编写 三、背包问题3.1 问题描述3.2 代码编写 一、贪心算法概述 1. 贪心算法的定义:贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以…

CICD 流程学习(四)搜素服务与消息队列

一 搜索服务 1 Lucene概念 Lucene是一种高性能、可伸缩的信息搜索 (IR)库,在2000年开源,最初由鼎鼎大名的Doug Cutting开发。是基于Java实现的高性能的开源项目 Lucene采用了基于倒排表的设计原理,可以非常高效地实现文本查找&#xff0…

GEO生信数据挖掘(九)WGCNA分析

第六节,我们使用结核病基因数据,做了一个数据预处理的实操案例。例子中结核类型,包括结核,潜隐进展,对照和潜隐,四个类别。第七节延续上个数据,进行了差异分析。 第八节对差异基因进行富集分析。…

windows内网渗透正向代理

内网渗透正向代理 文章目录 内网渗透正向代理1 正向代理图2 环境准备2.1 正向代理需求: 3 网卡配置3.1 【redream】主机3.2 【base】主机双网卡3.3 【yvkong】网卡设置 4 启动4.1【redream】网卡配置:4.2【base】网卡配置:4.3【yvkong】网卡地…

ArcGis打开影像显示全黑解决方法

我们加载图像,显示如下: 解决方法: 问题分析:Gamma值高于1影像亮化,低于1影像暗化。栅格影像导入进来呈现黑色,可能是因为影像的“Gamma校正”设置出现问题,影响了影像的拉伸度、亮度、对比度等…

FTP客户端lftp

目录 准备 1 lftp介绍 2 lftp语法 3 lftp选项 4 下载 4.1 服务端 4.2 客户端 5 上传 5.1 客户端 5.2 服务端 准备 两台虚拟机(且保证互通)关闭防火墙和SeLinux。 关闭防火墙 systemctl stop firewalld 关闭SeLinux setenforce 0 vi /etc/s…

12-k8s-HPA自动扩缩容

文章目录 一、k8s弹性伸缩类型二、HPA原理三、metrics-server插件四、创建nginx提供负载测试五、部署HPA master操作即可 一、k8s弹性伸缩类型 Cluster-Autoscale: 集群容量(node数量)自动伸缩,跟自动化部署相关的,依赖iaas的弹性伸缩,主要用…

学术特稿 | 著名书法家项国就:中国古代书法章草美学展现的形式分析

、 论文入编:大型综合美术类核心期刊《新美域》杂志2023年第七期。 中国古代书法章草美学展现的形式分析 摘要:本文旨在探讨中国古代书法风格章草的美学特点、审美价值以及代表性作品和艺术家。章草的美学特点体现在简洁流畅的笔画、清晰规整的字形结构以…

[架构之路-237]:目标系统 - 纵向分层 - 网络通信 - DNS的递归查询和迭代查询

目录 一、DNS协议与DNS系统架构 1.1 什么是DNS协议 1.2 为什么需要DNS协议 1.3 DNS系统架构 二、DNS系统的查询方式 2.1 递归与迭代的比较 2.2 DNS递归查询 2.3 DNS迭代查询 一、DNS协议与DNS系统架构 1.1 什么是DNS协议 DNS(Domain Name System&#xff…

nRF52832蓝牙从机

具体内容直接参考《nRF52832开发指南》 本文仅对关键内容和容易搞错的内容进行描述。 广播事件 扫描事件 连接事件 从机框架 日志配置和初始化log_init,具体参考手册和示例程序;APP定时器初始化timers_init,具体参考手册和示例程序&…

EFLK与logstash过滤

目录 一、Filebeat工作原理: 二、为什么要使用Filebeat: 三、Filebeat和Logstash的区别: 四、logstash 的过滤插件: 五、FilebeatELK 部署: 1. 安装filebeat: 2. 设置 filebeat 的主配置文件&#xff1…

SpringBoot面试题7:SpringBoot支持什么前端模板?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:SpringBoot支持什么前端模板? Spring Boot支持多种前端模板,其中包括以下几种常用的: Thymeleaf:Thymeleaf是一种服务器端Java模板引擎,能够…