首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【无痛学Python】Matplotlib数据可视化,看这一篇就够了!

【无痛学Python】Matplotlib数据可视化,看这一篇就够了!

作者头像
Skrrapper
发布2025-06-11 10:58:32
发布2025-06-11 10:58:32
59800
代码可运行
举报
文章被收录于专栏:技术分享技术分享
运行总次数:0
代码可运行

【Python数据分析】Matplotlib数据可视化,看这一篇就够了!

对数据的分析,离不开数据的可视化。

我们都知道数形结合的概念,图形往往可以帮助我们更好地分析数据之间的差异以及它们的趋势,同时数据的可视化基本就是通过图形来实现的。

数据可视化可以按照数据类型进行分类,大致分为以下几种:

1.时空数据可视化

时间和空间是描述事物的必要元素,将时空的信息进行可视化显得格外重要。

对于时间,我们使用线性和周期性来表示时间的可视化;

对于空间,我们合理选择和布局地图上的可视化元素,尽可能呈现更多的信息。

2.层次与网络结构数据可视化

网络数据作为现实世界中最常见的数据类型,可视化显得尤为重要。像层次结构、拓扑结构,都是属于这样的结构。

3.文本和跨媒体数据可视化

对于非结构化的数据,我们想要进行可视化,可以使用引入时间轴、标签云方法等等。

4.多变量数据可视化

对于多变量的高维数据,通常是更贴近现实世界的,那么我们要怎么把高维数据映射到笔记本电脑界面这么一个二维平面上呢?这也是数据可视化的一个重要作用。我们通常用好几个相关联的多视图来表示不同维度之间的关联。

Matplotlib作为Python数据分析中最经典的图形包,对可视化起到了很重要的作用。

1.Matplotlib简介

首次发表于2007年的Matplotlib,是Python的一个基于NumPy(由此可见Python数据分析真的离不开NumPy)的绘图工具包。它所提供的绘图,实际上是类似于MATLAB(工程级绘图工具)的纯Python第三方库。

基本结构

Matplotlib的结构主要由以下三个核心部分组成:

  1. Figure(图形)
    • 一个Figure代表整个图像,是绘图的基础,可以包含一个或多个子图(Axes)。
  2. Axes(子图)
    • Axes是Figure中的一个区域,包含数据点、坐标轴和标签,是具体绘制数据的对象。
  3. Artist(艺术家)
    • 是组成图形的基本元素,包括Line2D、Text、Patch等。

常用模块

  • matplotlib.pyplot:最常用的模块,提供了与MATLAB类似的绘图接口,简洁易用。

由于我们是数据分析,所以我们这里主要介绍它的最常用模块,pyplot

导入惯例:

代码语言:javascript
代码运行次数:0
运行
复制
import matplotlib.pyplot as plt

2.Matplotlib绘图基础

创建画布与子图

我们可以把Matplotlib也理解成为一种**“面向对象绘图方式”**,因为它也是基于图片对象(Figure)来进行绘制的。常见绘图方法如下:

函数

函数作用

plt.figure

创建空白画布,指定画大小

figure.add_subplot

创建并选中子图,可以指定子图行数,列数与选中图片编号,这里的子图行数和列数会直接格式化画布的布局,使得适应行列。

代码语言:javascript
代码运行次数:0
运行
复制
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

fig = plt.figure()
# 直接运行是没结果的,我们可以理解这个为初始化,之后我们要创建子图
ax1 = fig.add_subplot(2,2,1)
plt.show()

如图:

也可以这样来无需分步骤创建画布与子图,直接一起创建:

代码语言:javascript
代码运行次数:0
运行
复制
fig,axes = plt.subplots(2,3)
# 无需分步骤创建画布与子图,直接一起创建

我们发现每个子图之间的间距显得格外近,会影响显示,我们使用以下方法来调整间距。

代码语言:javascript
代码运行次数:0
运行
复制
plt.subplots_adjust(wspace = 1,hspace = 1)

这样就好多了。

同时,如果我想要设置它们拥有相同的x轴和y轴,我们就使用sharex和sharey。

代码语言:javascript
代码运行次数:0
运行
复制
fig,axes = plt.subplots(2,3,sharex = True,sharey = True)

可以看出区别。

同样,如果我们把子图之间的间距设为0,两种情形也是不一样的。

代码语言:javascript
代码运行次数:0
运行
复制
plt.subplots_adjust(wspace = 0,hspace = 0)

对比一下:

添加画布内容

我们完成了图形的初步绘制之后,就要在里面加东西了。比如属性。

通过以下几个函数进行属性的添加

函数

说明

title

添加标题,可以指定名称、颜色、位置、字体等等

xlabel

X轴名称

ylabel

Y轴名称

xlim

X轴范围,只能确定一个取值区间

ylim

Y轴范围,同上

xticks

指定X轴刻度的数目与取值

yticks

指定Y轴刻度的数目与取值

legend

指定当前图形的图例,可以指定大小标签等等

注意,图例的添加必须要在绘制图形之后,也就是设置完属性之后。

代码语言:javascript
代码运行次数:0
运行
复制
data = np.arange(0,5,0.01)
# print(data)
plt.title('joolin`s data')
plt.xlabel('x')
plt.ylabel('y')
plt.xlim(0,1)
plt.ylim(0,1)
plt.xticks([0,0.1,0.5,1.0])
plt.yticks([0,0.1,0.5,1.0])
plt.plot(data,data**2)
plt.plot(data,data**3)
plt.legend(['y=x^2','y=x^3'])
plt.show()

当我们把lim或者ticks更改的时候会出现什么呢?我们来看一下。

代码语言:javascript
代码运行次数:0
运行
复制
data = np.arange(0,5,0.01)
# print(data)
plt.title('joolin`s data')
plt.xlabel('x')
plt.ylabel('y')
# plt.xlim(0,1)
# plt.ylim(0,1)
# plt.xticks([0,0.1,0.5,1.0])
# plt.yticks([0,0.1,0.5,1.0])
plt.plot(data,data**2)
plt.plot(data,data**3)
plt.legend(['y=x^2','y=x^3'])
plt.show()

从这里其实看出,数据与图形还是有所分离的。你在图形中显示出的数据不一定就是数据的整体,说不定有一部分仅仅只是因为图形的限制而没有显现出来。

绘图的保存与显示

函数

作用

plt.savefig

保存绘制的图片,可指定分辨率、背景颜色、文件格式、保存的图片大小范围、

plt.show

显示绘制的图片

3.设置Pyplot的动态rc参数

rc参数Matplotlib 用于控制全局绘图样式和默认设置的配置选项,rc“runtime configuration” 的缩写。通过设置 rc 参数,可以统一控制图形的颜色、线条样式、字体大小、背景颜色、坐标轴样式等属性,确保绘图风格的一致性。

我们可以通过以下代码查看rc参数,找到当前用户的配置文件目录

代码语言:javascript
代码运行次数:0
运行
复制
print(plt.rcParams) # 注意这里plt是matplotlib软件包
print(plt.matplotlib_fname())

rc参数设置

rc的参数有这些:

linewidth、linestyle、marker、markersize等。通过Python编程对其进行配置。

绘图的填充

1.调用函数 fill_between() 填充区域
代码语言:javascript
代码运行次数:0
运行
复制
x = np.linspace(0,1,500)
y = np.sin(3*np.pi*x)*np.exp(-4*x)
fig,ax = plt.subplots()
plt.plot(x,y)
plt.fill_between(x,0,y,facecolor = 'green',alpha = 0.3)

同时你也可以指定区域进行填充,不过感觉没啥用

代码语言:javascript
代码运行次数:0
运行
复制
x = np.linspace(0,1,500)
y = np.sin(3*np.pi*x)*np.exp(-4*x)
fig,ax = plt.subplots()
plt.plot(x,y)
plt.fill_between(x[15:300],0,0.4,facecolor = 'green',alpha = 0.3)

或者两条曲线之间填充

代码语言:javascript
代码运行次数:0
运行
复制
x = np.linspace(0,1,500)
y1 = np.sin(3*np.pi*x)*np.exp(-4*x)
y2 = y1 + 0.2
fig,ax = plt.subplots()
plt.plot(x,y1)
plt.plot(x,y2)

plt.fill_between(x,y1,y2,facecolor = 'green',alpha = 0.3)
plt.show()

或者直接用fill填充

代码语言:javascript
代码运行次数:0
运行
复制
x = np.linspace(0,1,500)
y = np.sin(3*np.pi*x)*np.exp(-4*x)
fig,ax = plt.subplots()
ax.fill(x,y)
plt.show()

在绘图中显示公式

使用plt.text,在字符串前面加一个’r’即可。

文本注解

使用plt.text 以及annotate()进行文本注解以及指向型的文本注解。

4.Pyplot中的常用绘图

1.折线图(plot)

折线图一种将数据点按照顺序连接起来的图形,也可以看作是将散点图按照X轴坐标顺序连接起来的图形。

主要功能是查看因变量y随着自变量x改变的趋势,最适合用于显示随时间而变化的连续数据。

绘制格式:

代码语言:javascript
代码运行次数:0
运行
复制
plt.plot(* args,** kwargs)

虽然官方文档只包含这两个参数,但是实际可以填入的还有:x和y表示两轴对应的数据、color表示线条的颜色、marker表示点的类型、linestyle表示线条的类型、alpha表示点的透明度。

示例:

代码语言:javascript
代码运行次数:0
运行
复制
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(10)
y = sin(x)
z = cos(x)
plt.plot(x,y,color = 'g',marker = '*',linestyle = '--')
plt.plot(x,z)
plt.title(plotex)
plt.legend(['Y','Z'])
plt.show()

2.散点图(scatter)

散点图又称为散点分布图,是以一个特征为横坐标,另一个特征为纵坐标,用散点坐标来表示两个特征之间关系的图。

绘制格式:

代码语言:javascript
代码运行次数:0
运行
复制
plt.scatter(x,y,s = None,c = None,marker = None,alpha = None)

这里的s指的是 接受数值或者一维数组,指定点的大小,如果是一维数组,则代表每个点的大小

这里的c指的是 接受颜色或者一维数组,指定点的颜色,如果是一维数组,则代表每个点的颜色。

这里的marker和alpha都和上面一样。

示例

代码语言:javascript
代码运行次数:0
运行
复制
x1 = np.arange(1,30)
y1 = np.sin(x1)
plt.scatter(x1,y1,c = 'g')
plt.title('scatterex')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend('x1')
plt.show()

柱状图(bar)

柱状图通常用于较小数据集的分析。

绘制格式:

代码语言:javascript
代码运行次数:0
运行
复制
plt.bar(left,height,width = 0.8,bottom = None,hold = None,data = None)

left表示X轴数据,height表示X轴所代表数据的数量

width指定直方图宽度,bottom指定柱状距离X轴的高度

示例:

代码语言:javascript
代码运行次数:0
运行
复制
x = np.arange(0,10)
y = pd.Series(np.random.randn(10))
plt.bar(x,y)
plt.show()

饼图(pie)

一般用于表示数据的占比情况

绘制格式:

代码语言:javascript
代码运行次数:0
运行
复制
ply.pie(x,explode = None,labels = None,colors = None,colors = None,autopct = None,...)

参数过多,大家可以去官网参考,这里只介绍主要的几个。

x表示数据

explode表示指定项离圆心为n个半径

labels表示每一项的名称

autopct表示数值显示方式

radius表示饼图的半径,默认为1

示例:

代码语言:javascript
代码运行次数:0
运行
复制
labels= ['apples','pears','banana']
x = [15,30,15]
plt.pie(x,labels = labels,autopct='%1.1f%%')
plt.legend()
plt.show()

箱线图(boxplot)

也成为盒须图,使用数据中五个统计量(最小值、下四分位数、中位数、上四分位数和最大值)来描述数据,它可以粗略看出数据是否有对成型、分布的分散程度等信息。

绘制格式:

代码语言:javascript
代码运行次数:0
运行
复制
plt.boxplot(x,notch = None,sym = None,vert = None,whis = None,...)
概率图、雷达图、流向图

概率图:用来表示变量间概率依赖关系的理论

雷达图:用来显示多变量数据

流向图:多用于地理交通等

绘图中的表格制作(table)

Matplotlib提供了table方法用于绘图中的表格制作。

在数据可视化中,表格(Table)是一种重要的辅助元素,能够清晰展示数据细节或补充图表信息。

基本参数

  • 数据输入cellText接受二维列表/数组,rowLabelscolLabels设置行列标题。
  • 样式控制: - cellLoc:文本对齐方式(左/中/右)。 - colWidths:自定义列宽(如[0.3, 0.1])。 - bbox:通过[x, y, width, height]调整表格位置和大小。
  • 颜色与边框 - 背景色cellColours设置单元格颜色,支持二维颜色列表。
  • 表头高亮rowColourscolColours分别设置行列标题颜色。
  • 边框edges参数控制边框显示(如'closed'显示全部边框)。
代码语言:javascript
代码运行次数:0
运行
复制
plt.table(cellText=[weight], colLabels=kinds, rowLabels=['重量(g)'], 
          loc='right', bbox=[1.2, 0.3, 0.8, 0.2])

Labels`设置行列标题。

  • 样式控制: - cellLoc:文本对齐方式(左/中/右)。 - colWidths:自定义列宽(如[0.3, 0.1])。 - bbox:通过[x, y, width, height]调整表格位置和大小。
  • 颜色与边框 - 背景色cellColours设置单元格颜色,支持二维颜色列表。
  • 表头高亮rowColourscolColours分别设置行列标题颜色。
  • 边框edges参数控制边框显示(如'closed'显示全部边框)。
代码语言:javascript
代码运行次数:0
运行
复制
plt.table(cellText=[weight], colLabels=kinds, rowLabels=['重量(g)'], 
          loc='right', bbox=[1.2, 0.3, 0.8, 0.2])
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-06-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.Matplotlib简介
    • 基本结构
    • 常用模块
  • 2.Matplotlib绘图基础
    • 创建画布与子图
    • 添加画布内容
    • 绘图的保存与显示
  • 3.设置Pyplot的动态rc参数
    • rc参数设置
    • 绘图的填充
      • 1.调用函数 fill_between() 填充区域
    • 在绘图中显示公式
    • 文本注解
  • 4.Pyplot中的常用绘图
    • 1.折线图(plot)
    • 2.散点图(scatter)
    • 柱状图(bar)
    • 饼图(pie)
    • 箱线图(boxplot)
      • 概率图、雷达图、流向图
    • 绘图中的表格制作(table)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档