【Python数据分析】Matplotlib的初步认识

article/2025/8/29 5:24:30

文章目录

      • 1.什么是Matplotlib
      • 2.常见图形种类及意义
        • 1.折线图
        • 2.散点图
        • 3.柱状图
        • 4.直方图
        • 5.饼图
      • 3.认识Matplotlib图像结构
        • 1.第一层
        • 2.第二层
        • 3.第三层
      • 4.折线图初体验
        • 1.设置标题
        • 2.中文显示
        • 3.自定义X轴刻度
        • 4.一图多线
        • 5.一图多个坐标系子图

1.什么是Matplotlib

Matplotlib是一个Python 2D绘图库,它可以在各种平台上以各种硬拷贝格式和交互式环境生成出具有出版品质的图形。

Matplotlib试图让简单的事情变得更简单,让无法实现的事情变得可能实现。也是Python中最常用的可视化工具之一,它的功能非常强大,可以通过调用函数轻松方便地绘制数据分析中常见的各种图像,比如折线图、条形图、柱状图、散点图、饼图等。

2.常见图形种类及意义

选择最重要,一个选择和另一个选择结果可能会有天壤之别。在我们将数据的可视化之前,同样也需要根据图形的特点来选择绘制数据的图形,从而让我们快速发现数据的特点。

接下来,我们一起了解一下Matplotlib常见图形种类及意义。

1.折线图

以折线的上升或下降来表示统计数量的增减变化的统计图

特点:能够显示数据的变化趋势,反映事物的变化情况。(变化)

在这里插入图片描述

2.散点图

用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式。

特点:判断变量之间是否存在数量关联趋势,展示离群点(分布规律)。

在这里插入图片描述

3.柱状图

排列在工作表的列或行中的数据可以绘制到柱状图中。

特点:绘制离散的数据,能够一眼看出各个数据的大小,比较数据之间的差别。(统计/对比)
在这里插入图片描述

4.直方图

由一系列高度不等的纵向条纹或线段表示数据分布的情况。
一般用横轴表示数据范围,纵轴表示分布情况。

特点:绘制连续性的数据展示一组或者多组数据的分布状况(统计)。
在这里插入图片描述

5.饼图

用于表示不同分类的占比情况,通过弧度大小来对比各种分类。

特点:分类数据的占比情况(占比)。

在这里插入图片描述
当然,除了这些常用图之外,matplotlib还可以绘制一些其它的图像,那么,这些图究竟是如何绘制的呢?

3.认识Matplotlib图像结构

通常情况下,我们可以将一张Matplotlib图像分成三层结构:

1.第一层是底层的容器层,主要包括Canvas、Figure、Axes;
2. 第二层是辅助显示层,主要包括axis、spines、grid、legend、title等;
3. 第三层为图像层,即通过plot、scatter等方法绘制的图像。

1.第一层

第一层是底层的容器层,主要包括Canvas、Figure、Axes;

Canvas是位于最底层的系统层,在绘图的过程中充当画板的角色,即放置画布(Figure)的工具,用户一般接触不到。

Figure是Canvas上方的第一层,也是需要用户来操作的应用层的第一层,在绘图的过程中充当画布的角色,我们可以设置画布的大小和分辨率等.

Axes是应用层的第二层,在绘图的过程中相当于画布上的绘图区的角色。一个Figure对象可以包含多个Axes对象,每个Axes都是一个独立的坐标系,绘图过程中的所有图像都是基于坐标系绘制的。

在这里插入图片描述

2.第二层

第二层是辅助显示层,主要包括axis、spines、grid、legend、title等;

辅助显示层为Axes(绘图区)内的除了根据数据绘制出的图像以外的内容,主要包括

Axes外观(facecolor)、边框线(spines)、坐标轴(axis)、坐标轴名称(axis
label)、坐标轴刻度(tick)、坐标轴刻度标签(tick
label)、网格线(grid)、图例(legend)、标题(title)等内容。

3.第三层

第三层为图像层,即通过plot、scatter等方法绘制的图像。

图像层指Axes内通过plot、scatter、bar、histogram、pie等函数根据数据绘制出的图像。

🚩总结得出
Canvas(画板)位于最底层,用户一般接触不到
Figure(画布)建立在Canvas之上
Axes(绘图区)建立在Figure之上
坐标轴(axis)、图例(legend)等辅助显示层以及图像层都是建立在Axes之上

4.折线图初体验

跟Pandas的使用一样,使用matplotlib之前,我们需要将它的模块,因为我们是使用Matplotlib的pyplot模块进行图形绘制,所以我们要导入pyplot模块。

from matplotlib import pyplot as plt

我们从matplotlib包中导入了pyplot模块并将其改名为plt,编写代码时,直接使用plt调用方法即可。

#在使用jupyter notebook时调用matplotlib.pyplot的绘图函数plot()
# 进行绘图的时候,或者生成一个figure画布的时候,需要加上%matplotlib
%matplotlib inlinefrom matplotlib import pyplot as plt
x = range(1,8) 
y = [17, 17, 18, 1, 11, 11, 13]
plt.plot(x,y) 
plt.show()

代码含义

绘制二维图形需要确定x、y值:图形中点的值(x, y值的个数要相同) plt.plot(x,y):根据传过来的x,y值进行绘制折线图

plt.show():显示绘制的图形

折线的颜色、折点以及宽度该怎么设置呢

plt.plot(x, y, color='green',alpha=1,linestyle='-',linewidth=5,marker='v') 
plt.show()

✨效果
在这里插入图片描述

color='green'设置线的颜色
alpha=0.5设置线的透明度,让其拥有似漏非漏的感觉 inestyle='—'设置线的样式,-
实线(solid)、-- 短线(dashed)、-. 短点相间线(dashdot)、:虚点线(dotted)

linewidth=3设置线的宽度 marker='o'设置折点的样式

下面是折点的各种样式
在这里插入图片描述

1.设置标题

对一个图形最重要的是内容的绘制,其次就是标题,我们需要让其他人清楚这张图的含义是什么,图中x轴表示什么,y轴表示什么,这个时候我们就需要为图像添加一些标题。

%matplotlib inlinefrom matplotlib import pyplot as plt
x = range(1,8) 
y = [17, 17, 18, 15, 11, 11, 13]
plt.plot(x, y, color='green',alpha=0.5,linestyle='-',linewidth=3,marker='*') 
plt.xlabel('Time')
plt.ylabel("Temp")
plt.title('Title')
plt.show()

✨效果

在这里插入图片描述
🚩结果我们发现,通过plt.xlabel('Time')、plt.ylabel("Temp")、plt.title('Title')三个方法,将x轴标题,y轴标题以及图片标题成功添加上了,这样就可以清晰明了地看出图片及每个轴的含义。

2.中文显示

相信大家在练习的时候也遇到过这样的问题,使用Matplotlib画的图居然不显示中文,那怎么能行呢
在这里插入图片描述
如果想要Matplotlib显示中文我们可以使用三种方法:
第一种:直接修改Matplotlib配置文件matplotlibrc
第二种:动态修改配置
第三种:设置自定义字体

我们就用第三种方法,因为自定义的字体自由度比较高,同时也方便我们在一个图中使用不同风格的字体。

plt.rcParams['font.sans-serif'] = ['SimHei']     #windows下使用这种方法
plt.rcParams['font.family'] = 'Arial Unicode MS' #mac下使用这种方法

来试一试下面的代码

%matplotlib inline
from matplotlib import pyplot as plt
from matplotlib import font_manager
import random
# 创建字体对象
plt.rcParams['font.sans-serif'] = ['SimHei']     #windows下使用这种方法
y = [random.randint(10,30) for i in range(120)]
# 添加字体属性
plt.ylabel("次数")
plt.xlabel("时间")
# 设置标题
plt.title('每分钟跳动次数')
plt.plot(x,y)
plt.show()

✨效果

在这里插入图片描述

3.自定义X轴刻度

在写的过程中我发现2个问题:

  1. 刻度的文字过长,但是图片的宽度不够。
  2. x轴和y轴刻度会默认根据x值和y值生成,并且Matplotlib默认会生成它认为合适的刻度间距。

这些情况会导致x轴的刻度值全都重叠在一起

要想改变图像的大小,我们需要更改画布的大小来实现,matplotlib 中设置图形大小的语句如下:

plt.figure(figsize=(a, b), dpi=dpi)

其中:

  • figsize 设置图形的大小,a 为图形的宽, b 为图形的高,单位为英寸
  • dpi 为设置图形每英寸的点数,即每英寸多少个像素

我们将图形的宽和高分别设置为20,10英寸,分辨率设置为80后发现,x轴的重叠的效果减轻一些。但是如果我们以后遇到很长的刻度怎么办呢?

plt.figure(figsize=(20, 20),dpi=80)

展示底部图像
✨效果

在这里插入图片描述
那我们是不是还要继续修改宽和高呢,答案肯定是No,如果继续放大,图形会变的很大,不是我们想要的效果,所以,并不是所有的刻度问题我们都可以使用改变图片的大小来解决。

如果x轴的刻度我们能自己设置,岂不是完美了,我们可以根据自己的想法,对x轴刻度的疏密程度和刻度值进行设置。

当然有解决办法,使用plt.xticks()这个方法自定义x轴的刻度

xticks(locs, [labels], **kwargs) 

locs参数为数组参数,表示x-axis的刻度线显示标注的地方,即ticks放置的地方
第二个参数也为数组参数,表示在locs数组表示的位置添加的标签。

plt.xticks(range(0,len(x),4),x[::4],rotation=45)

✨效果

在这里插入图片描述
range(0,len(x),4)为xticks()的第一个参数,根据x值的个数调整x轴的刻度疏密程度。

x[::4]为xticks()的第二个参数,还是使用x的值作为刻度的标签值,但是这里获取了其中的一部分,确保第一个参数和第二个参数的个数相同。

rotation=45默认刻度的值是横向书写的,这样会有一定的重叠,所以我们将文字进行旋转操作,45位旋转的度数。

4.一图多线

一个坐标系中绘制两条折线,只需要使用两次plt.plot()方法就可以了。看下面的代码。

%matplotlib inlinefrom matplotlib import pyplot as plt
x = range(1,8) 
y = [17, 17, 18, 15, 11, 11, 13]
z=[11,4,2,6,7,1,8]
plt.plot(x, y, color='green',alpha=0.5,linestyle='-',linewidth=3,marker='*') 
plt.plot(x,z) plt.xticks(range(0,len(x),2),x[::2],rotation=0)
plt.xlabel('Time')
plt.ylabel("Temp")
plt.title('Title')
plt.show()

✨效果
在这里插入图片描述

一个坐标系中绘制两条折线,只需要使用两次plt.plot()方法就可以了。

但是,通过图形大家有没有发现,我们并不知道哪条线是哪条线,所以,我们应该在图像中添加对应的图例,从而标明每条线的作用是什么。

plt.legend()方法就是图形添加图例的方法,但是这个方法比较特殊,一共需要两步才能成功的添加上图例,我们先运行下放代码,看一下图例的效果:

plt.plot(x, y, color='green',alpha=0.5,linestyle='-',label='绿色') 
plt.grid(alpha=0.8)
plt.plot(x,z,label='蓝色') 
plt.legend()

✨效果
在这里插入图片描述

细心的小伙伴会发现,结果中我们不仅添加上了图例,在图形中我们发现了很多网格。

没错,代码中添加这这样一行代码plt.grid(alpha=0.4),这行代码就是添加网格的效果,这里面的alpha=0.4是设置网格线的透明度,范围是(0~1)。
绘制网格的作用就是为了辅助我们更好的观察数据的x值和y值。

5.一图多个坐标系子图

调用plt.subplot()函数就可以在画布上创建一个子图,

plt.subplot(nrows, ncols, index)

函数的
nrows 参数指定将数据图区域分成多少行;
ncols 参数指定将数据图区域分成多少列;
index 参数指定获取第几个区域。

Axes1、Axes2、Axes3、Axes4分别代表四个区域。

在这里插入图片描述
尝试运行下面的代码

%matplotlib inline
from matplotlib import pyplot as plt
import numpy as np
x = [1,10,14,15,16,17]
y = np.array([3,4,6,2,1,5])plt.figure(figsize = (10,8))
# 第一个子图
# 折线图
plt.subplot(2, 2, 1)
plt.plot(y)
plt.title('Axes1')
#第二个子图
# 折线图,y轴每个数据的立方
plt.subplot(2, 2, 2)
plt.plot(y**3)
plt.title('Axes2')
#第三个子图
# 折线图,x轴和y轴均指定数据
plt.subplot(2, 2, 3)
plt.plot(x,y)
plt.title('Axes3')plt.subplot(2, 2, 4)
plt.plot(x,y)
plt.title('Axes4')
plt.show()#当存在多个show时会重新开始一个画板

✨效果
在这里插入图片描述


🚩到这里相信大家对matplotlib有了一定了解,这些函数方法都不需要去死记,而是要多敲代码,时间久了自然能够信手拈来。


http://chatgpt.dhexx.cn/article/qtODyH8s.shtml

相关文章

使用Matplotlib绘图

🤵 Author :Horizon Max ✨ 编程技巧篇:各种操作小结 🎇 机器视觉篇:会变魔术 OpenCV 💥 深度学习篇:简单入门 PyTorch 🏆 神经网络篇:经典网络模型 💻 …

Python -- Matplotlib库的使用

Matplotlib库的使用 要点:matplotlib是提供数据绘图功能的第三方库,其pyplot子库主要用于实现各种数据展示图形的绘制。 1. matplotlib.pyplot库概述 matplotlib.pyplot是matplotlib的子库,引用方式如下: >>>import ma…

Matplotlib库介绍

目录 一、Matplotlib库介绍 二、基本绘图流程 三、pyplot基础语法 1.创建画布与创建子图 2.添加画布内容 3.保存与展示图形 4.不同图表绘制函数 四、其它相关内容 1.线条颜色(color)的设置 2.线条标记(marker)的设置 3.线条类型(line)的设置 一、Matplotlib库介绍 …

Python Matplotlib库用法笔记

Python Matplotlib库用法笔记 一、了解Matplotlib库1 Matplotlib是什么2 Matplotlib的作用3利用Matplotlib做一个简单的画图3.1matplotlib.pyplot模块3.2画图 4 Matplotlib的三层结构4.1容器层4.2 辅助显示层4.3图像层 二、折线图1 折线图的绘制与显示1.1设置图形的风格 2 设置…

Python之数据可视化——matplotlib系统介绍(一)

matplotlib基础系统介绍 目录 1. Matplotlib概述 2. 讲解Matplotlib核心原理 3. Matplotlib相关基础操作介绍 3.1 创建figure(画布)的方式及完整绘图步骤3.2 线型设置3.3 中文与特殊符号(负号)相关支持设置3.4 图例和网络的设置3.5 坐标轴的设置和相关操作3.6 figure的区域…

Matplotlib下载、安装、简单使用

Matplotlib Matplotlib是一个Python 2D绘图库,它以多种硬拷贝格式和跨平台的交互式环境生成出版物质量的图形。它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案,也可用于Python脚本,Python和IPython (opens new win…

Python--Matplotlib(基本用法)

Matplotlib Matplotlib 是Python中类似 MATLAB 的绘图工具,熟悉 MATLAB 也可以很快的上手 Matplotlib。 1. 认识Matploblib 1.1 Figure 在任何绘图之前,我们需要一个Figure对象,可以理解成我们需要一张画板才能开始绘图。 import matplo…

【51单片机】AS608指纹锁设计

文章目录 一、主要功能二、硬件资源1.硬件准备2.硬件连接 三、软件设计1.软件结构2.主要代码 四、实验现象联系作者 一、主要功能 系统运行后,LCD显示指纹锁主界面,显示模块指纹库剩余容量和指纹对比等级数。如果已经添加了指纹的话,直接在主…

基于STM32的多功能门禁系统(AS608指纹识别、密码解锁、刷卡解锁)

目录 一、项目功能 二、视频 三、原理图 4、材料选择 5、部分程序 资料下载地址:基于STM32的多功能门禁系统 一、项目功能 1、AS608指纹解锁;可以录入、删除、验证指纹; 2、密码解锁;可以密码验证、修改密码和保存密码&a…

AS608指纹模块的上位机检测

​​​​​引言 最近在搞这个基于STC51的指纹锁,目前已经差不多完成,对于我这个小白来说还是有点难度的。上位机检测是之前做的,现在也算是回忆总结一下吧! 正文 AS608指纹模块的介绍 PCB: 具体操作 第一步 将AS…

Arduino Nano+AS608指纹门禁系统

100元制作宿舍指纹门禁系统 效果图:硬件清单各个模块连接程序流程图驱动文件以及配置烧录环境驱动文件配置编译器 局部源码**演示视频**更新内容完整源码下载: 效果图: 这里用的是电容式的AS608指纹模块 硬件清单 名称用途Arduino Nano开发…

ATECC608A的完美兼容国产替代芯片

工程师强烈推荐的一款ATECC608A的完美兼容替代加密芯片:MOD8ID MOD8ID是一款MODSEMI推出的高安全等级加密芯片,真正做到了软硬件P2P兼容ATECC608系列,也就是说不需要改变主机端原有的Cryptolib库,甚至无需更改任何代码和硬件即可…

基于stm32f103c8t6及AS608-----指纹锁项目

一、关于本项目: 本文适合于初学者,大佬还请勿喷,欢迎提出意见,有纰漏之处将及时纠正。在浅学了stmf103c8t6后,想着依据现在所拥有的知识和能力做一个小项目。在了解到有关宿舍指纹锁的相关内容,对该功能的…

【基于STM32F103+AS608的智能打卡系统】

基于STM32F103AS608的智能打卡系统 工程源码链接 链接:https://pan.baidu.com/s/1RRc03nTrcTp--xfQnv2r9Q?pwdin9p 提取码:in9p --来自百度网盘超级会员V5的分享一、功能描述基于STM32F013AS608实行的智能打卡系统 1》进行打卡功能 2》指纹添加&…

as608指令c语言,单片机+AS608的使用,并带程序

之前在AS608的使用上走了许多弯路,这次希望身为初学者的我们可以吸取经验,特此介绍AS608. 指纹模块AS608的使用: 1脚红线:Vcc,连接3.3V电源供电,勿接3.3V以上电源 2脚黄线:接单片机串口TX端 3脚白线:接单片机串口RX端 4脚黑线:GND,3.3V电源的GND 5脚蓝线:模块触摸…

STM32+AS608指纹模块

前言:这个串口逻辑有点问题,要是用串口做命令输入端的话要自己改一下串口逻辑,串口只是调试能不能用指纹模块的功能,后期不需要串口发命令所以没怎么写串口的命令逻辑 1.AS608的资料挺全的,就是按照他给的来写命令&…

AS608与单片机握手失败、与上位机通讯失败

简言:本人在使用AS608模块时遇到了握手失败、通讯失败的问题,尝试网上各种方法未果后,换了一个AS608模块,问题解决。 一、与单片机握手失败 检查代码中的波特率是否为9600,再通过上位机将AS608的波特率改为与代码相同…

vue+vantUI实现单选、多选题(上一题、下一题)

vue+vantUI实现单选、多选题(上一题、下一题) <template><div class="exam-online"><div class="table-list2"><div v-for="(item,index) in questionList" :key="index"><div v-if="currentNum===…

答题微信小程序实现(4):数据库题库的调用/上一题、下一题/题量length的获取

不积跬步无以至千里&#xff0c;不计小流无以成江海。 本来想直接上选择题的&#xff0c;但步子就有点太大了&#xff0c;不是一点点来的。选择题除了题库的调用外&#xff0c;还需要判断答案对错&#xff0c;涉及到if语句&#xff0c;这个if语句应该单独写一个&#xff0c;对…

vue实现调查问卷一页一题,上一题下一题形式

使用了vant组件的radio 单选框 官网https://youzan.github.io/vant/#/zh-CN/radio 效果图 效果图 做出来的效果图就是上面那样 一页一题 附上代码&#xff1a; <template><div class"second"><!-- 问卷题 --><div v-for"(item,index) in…