Matplotlib(一)- 数据可视化与Matplotlib

文章目录

  • 一、数据可视化
    • [1. 数据可视化的概念](#1. 数据可视化的概念)
    • [2. 数据可视化流程](#2. 数据可视化流程)
    • [3. 数据可视化目的](#3. 数据可视化目的)
    • [4. 常见的可视化图表](#4. 常见的可视化图表)
      • [4.1 折线图](#4.1 折线图)
      • [4.2 柱形图](#4.2 柱形图)
      • [4.3 条形图](#4.3 条形图)
      • [4.4 堆积图](#4.4 堆积图)
        • [4.4.1 堆积面积图](#4.4.1 堆积面积图)
        • [4.4.2 堆积柱形图和堆积条形图](#4.4.2 堆积柱形图和堆积条形图)
      • [4.5 直方图](#4.5 直方图)
      • [4.6 箱形图](#4.6 箱形图)
      • [4.7 饼图](#4.7 饼图)
      • [4.8 散点图](#4.8 散点图)
      • [4.9 气泡图](#4.9 气泡图)
      • [4.10 误差棒图](#4.10 误差棒图)
      • [4.11 雷达图](#4.11 雷达图)
  • 二、Python中常见的数据可视化库
    • [1. Matplotlib](#1. Matplotlib)
    • [2. Seaborn](#2. Seaborn)
    • [3. pyecharts](#3. pyecharts)
    • [4. Bokeh](#4. Bokeh)
    • [5. Plotly](#5. Plotly)
    • [6. ggplot](#6. ggplot)
  • 三、Matplotlib
    • [1. Matplotlib简介](#1. Matplotlib简介)
    • [2. Matplotlib的API](#2. Matplotlib的API)
      • [2.1 Pyplot API](#2.1 Pyplot API)
      • [2.2 Object-Oriented API](#2.2 Object-Oriented API)
    • [3. 安装Matplotlib](#3. 安装Matplotlib)
    • [4. Matplotlib的核心类](#4. Matplotlib的核心类)
      • [4.1 Figure 类](#4.1 Figure 类)
      • [4.2 Axes 类](#4.2 Axes 类)
      • [4.3 Axis 类](#4.3 Axis 类)
      • [4.4 Artist 类](#4.4 Artist 类)
      • [4.5 pyplot 模块](#4.5 pyplot 模块)

一、数据可视化

1. 数据可视化的概念

数据可视化是将复杂数据转化为图形、图表等视觉形式,借助人类对视觉信息的敏感度,快速呈现数据规律、趋势和关联,帮助人们直观理解数据、发现隐藏信息并高效沟通。

2. 数据可视化流程

Created with Raphaël 2.3.0 开始 读取目标数据 选择图类型 绘制图形 保存可视化结果 结束

3. 数据可视化目的

数据可视化的目的是通过直观的视觉形式,简化复杂数据,清晰呈现其规律、趋势和关联,帮助人们快速理解信息、发现问题、高效沟通,为决策或信息传递提供支持。

4. 常见的可视化图表

4.1 折线图

折线图主要用于展示数据随时间或连续变量的变化趋势,通过连接数据点形成的线条,直观呈现数值的增减规律、波动情况及变化速率,帮助快速发现数据的发展走向和周期性特征,便于分析趋势背后的关联与规律。

4.2 柱形图

柱形图通过高度不同的柱体直观对比不同类别或组别数据的数值大小,清晰呈现各类别间的差异、高低排序及数据分布,便于快速判断类别间的数量关系和突出关键数据。

4.3 条形图

条形图通过长度不同的横向条形直观对比多个类别或组别数据的数值大小,尤其适用于类别名称较长或类别数量较多的场景,能清晰呈现各类别间的数量差异、排序关系及分布特征,方便快速识别数据高低和类别间的比较结果。

4.4 堆积图

4.4.1 堆积面积图

堆积面积图通过叠加的面积块展示多个数据系列随时间或连续变量的变化趋势,既能呈现每个系列的数值增减,又能直观反映整体总量的变化及各部分占比关系,便于同时分析局部趋势与整体构成。

4.4.2 堆积柱形图和堆积条形图

堆积柱形图(纵向)和堆积条形图(横向)通过分层柱体 / 条形的总长度(高度)展示类别总量,同时以不同分层直观呈现各子类别占比,既便于对比不同类别间的总量差异,又能清晰体现单个类别内部的构成关系。

4.5 直方图

直方图通过将连续数据划分为若干区间( bins ),用矩形的高度表示每个区间内数据的频数或频率,直观呈现数据的分布特征(如集中趋势、离散程度、是否对称等),帮助快速判断数据的分布形态和异常值情况。

4.6 箱形图

箱形图通过展示数据的四分位数(中位数、上下四分位数)、最大值、最小值及异常值,直观呈现数据的分布特征(集中趋势、离散程度、对称性)和潜在异常情况,便于快速对比多组数据的分布差异与整体统计特征。

4.7 饼图

饼图通过将圆形划分为不同比例的扇形,直观展示单个数据总体中各组成部分的占比关系,清晰呈现各部分在整体中的相对大小和构成比例,便于快速理解类别间的份额差异及整体结构特征(适用于类别较少的场景)。

4.8 散点图

散点图通过在直角坐标系中绘制多组数据点(每个点对应两个变量的数值),直观呈现变量间的关联关系(如正相关、负相关或无相关),同时能反映数据的分布密集程度和异常值,帮助快速识别变量间的潜在规律或趋势。

4.9 气泡图

气泡图在散点图基础上,通过气泡的大小增加第三个变量的信息维度,既呈现两个变量间的关联关系,又能直观展示每个数据点对应的第三个变量的数值规模,从而同时反映三个变量间的相互关系及数据的多重特征。

4.10 误差棒图

误差棒图通过在数据点或统计量(如均值)旁添加线段(误差棒),直观展示数据的变异范围(如标准差、标准误、置信区间等),既呈现核心数据的集中趋势,又能反映其不确定性或离散程度,帮助更全面地理解数据的可靠性与波动特征。

4.11 雷达图

雷达图以从同一点出发的多条坐标轴(代表不同指标)为框架,将各指标数据连接成多边形,直观展示单个样本在多维度指标上的表现,以及多个样本在各维度的差异与整体特征,便于快速对比多维度数据的均衡性和综合水平。


二、Python中常见的数据可视化库

1. Matplotlib

Matplotlib 是 Python 中最基础且应用广泛的数据可视化库,提供了高度自定义的绘图接口,支持绘制折线图、柱状图、饼图等多种基础图表,可灵活控制图表的样式细节,适用于从简单数据展示到复杂科学绘图的各类场景。

2. Seaborn

Seaborn 基于 Matplotlib 开发,简化了绘图流程,内置多种美观的默认样式,专注于统计数据可视化,能轻松绘制热力图、箱线图、小提琴图等统计图表,便于快速探索数据分布和变量关系。

3. pyecharts

pyecharts 是基于 ECharts 的 Python 可视化库,擅长生成交互式网页图表,支持折线图、地图、词云等多种动态图表,可通过简单代码实现图表的交互功能(如缩放、 tooltip 提示),适合用于 Web 数据可视化展示。

4. Bokeh

Bokeh 是专注于交互式可视化的 Python 库,能生成可在浏览器中展示的动态图表,支持大型数据集的高效渲染,可通过回调函数实现复杂交互,常用于构建交互式数据仪表盘。

5. Plotly

Plotly 是一个功能强大的交互式可视化库,支持多种图表类型(包括 3D 图表),提供直观的交互体验(如悬停查看详情、缩放旋转),既适用于快速绘制基础图表,也能构建复杂的交互式可视化应用,且支持 Python、R 等多语言。

6. ggplot

ggplot 基于 R 语言的 ggplot2 理念开发,采用 "图层叠加" 的语法逻辑,通过简洁代码即可生成美观且规范的统计图表,注重数据与图形元素的映射关系,适合遵循 " Grammar of Graphics " 思想的用户快速实现可视化。


三、Matplotlib

1. Matplotlib简介

Matplotlib 是 Python 中最经典、应用最广泛的数据可视化库,诞生于 2003 年,最初旨在模仿 Matlab 的绘图风格,为 Python 提供类似的可视化能力。它支持从简单的折线图、柱状图到复杂的热图、三维图等几乎所有基础图表类型,且允许开发者通过代码精细控制图表的每一个细节(如坐标轴刻度、颜色、字体、图例等),灵活性极高。无论是快速绘制草图、生成 publication 级别的科研图表,还是嵌入 GUI 应用程序,Matplotlib 都能胜任,是 Python 可视化的基础工具,也是许多其他可视化库(如 Seaborn)的底层依赖。

2. Matplotlib的API

Matplotlib 提供两种主要的编程接口,适用于不同场景和使用习惯:

2.1 Pyplot API

Pyplot API 是 Matplotlib 的交互式接口,通过matplotlib.pyplot模块提供一系列类似 Matlab 的函数(如plot()、bar()、show()),无需显式创建图形对象,直接调用函数即可逐行绘制图表。它适合快速生成简单图表或进行交互式探索,代码简洁直观,例如用plt.plot(x, y)可直接绘制折线图,plt.title()添加标题。但缺点是当图表复杂(如多子图、自定义样式较多)时,容易出现状态管理混乱。

2.2 Object-Oriented API

面向对象 API(OO API)通过显式创建图形(Figure)和子图(Axes)对象,调用对象的方法(如ax.plot()、ax.set_title())进行绘图,更符合 Python 的面向对象编程思想。它将图表的各个元素(图形、子图、坐标轴等)视为独立对象,便于精细控制复杂图表的结构(如多子图布局、共享坐标轴、自定义图例位置等),适合开发可复用的可视化代码或绘制专业级图表。例如先通过fig, ax = plt.subplots()创建图形和子图对象,再用ax.plot(x, y)绘图,逻辑更清晰,是处理复杂场景的推荐方式。

3. 安装Matplotlib

在开始使用Matplotlib之前,需要先安装它,通过以下命令安装:

shell 复制代码
pip install matplotlib -i https://mirrors.aliyun.com/pypi/simple/

4. Matplotlib的核心类

4.1 Figure 类

Figure类是Matplotlib中所有绘图元素的顶层容器,可理解为"画布"。一个Figure对象代表一张完整的图像,包含所有子图(Axes)、标题、图例、颜色条等元素。通过plt.figure()Figure()可创建Figure对象,其属性(如尺寸figsize、分辨率dpi、背景色facecolor)决定了图像的整体框架。例如,一张图中可能有1个或多个子图,这些子图都嵌套在同一个Figure对象中。

plt.figure()方法如下所示:

python 复制代码
def figure(num=None,  # autoincrement if None, else integer from 1-N
           figsize=None,  # defaults to rc figure.figsize
           dpi=None,  # defaults to rc figure.dpi
           facecolor=None,  # defaults to rc figure.facecolor
           edgecolor=None,  # defaults to rc figure.edgecolor
           frameon=True,
           FigureClass=Figure,
           clear=False,
           **kwargs
           ):

Figure 类构造函数中一些常用的参数:

参数名 描述 默认值 示例
num 指定图形的编号或名称,用于复用图形 None plt.figure(num=1) plt.figure(num='plot1')
figsize 指定 Figure 的尺寸大小(单位为英寸),格式为 (width, height) None fig = plt.figure(figsize=(8, 6))
dpi 设置图形的分辨率(每英寸点数)。 None(默认100) fig = plt.figure(dpi=150)
facecolor 设置 Figure 背景颜色。 'white' fig = plt.figure(facecolor='lightgray')
edgecolor 设置 Figure 边框的颜色。 'white' fig = plt.figure(edgecolor='black')
linewidth 控制 Figure 边框线宽。 0.0 fig = plt.figure(linewidth=2.0)
frameon 是否显示 Figure 的边框。 True fig = plt.figure(frameon=False)
subplotpars 可选的 SubplotParams 对象,控制子图之间的间距和边距等。 None from matplotlib import rc<br>sp = rc.subplotparams(left=0.1)<br>fig = plt.figure(subplotpars=sp)
tight_layout 布尔值或字典,是否自动调整子图布局以避免重叠。 False fig = plt.figure(tight_layout=True)
constrained_layout 布尔值,是否启用更智能的布局调整系统,通常比 tight_layout 更强大。 False fig = plt.figure(constrained_layout=True)
layout 控制整体布局方式,可选值为 'tight''constrained',是对 tight_layoutconstrained_layout 的简化接口。 None layout='tight' layout='constrained'
FigureClass 自定义一个继承自 Figure 的类,用于创建图形对象。 Figure 类本身 fig = plt.figure(FigureClass=MyFigure)
clear 如果为 True,则在复用已有 Figure 时清除其内容;否则保留旧内容。 False fig = plt.figure(clear=True)

4.2 Axes 类

Axes类代表Figure中的"子图",是实际绘制数据的区域,包含坐标轴(Axis)、标题、图例等元素。每个Axes对象对应一个独立的绘图区域(如折线图、柱状图所在的区域),一张Figure中可包含多个Axes(通过plt.subplots(nrows, ncols)创建网格状子图)。绘图操作(如ax.plot()ax.bar())主要通过Axes对象的方法实现,同时可通过ax.set_xlabel()ax.set_title()等方法设置子图的细节。

Axes 类常用参数说明表:

参数名 描述 默认值 示例
fig 所属的 Figure 对象。 Axes(fig=fig)
rect 定义坐标轴的位置和大小,格式为 [left, bottom, width, height](归一化坐标) rect=[0.1, 0.1, 0.8, 0.8]
facecolor 坐标轴背景颜色。 'white' facecolor='lightgray'
frame_on 是否绘制坐标轴的边框(spines)。 True frame_on=False
sharex 共享 x 轴的其他 Axes 对象,用于同步缩放。 None sharex=ax1
sharey 共享 y 轴的其他 Axes 对象。 None sharey=ax1
label Axes 的标签,可用于 figure.axes 字典查找。 '' label='main_plot'
xscale 设置 x 轴的刻度类型(如 'log', 'linear' 等)。 'linear' xscale='log'
yscale 设置 y 轴的刻度类型。 'linear' yscale='log'
xlim 设置 x 轴范围,格式为 (min, max) 自动根据数据 xlim=(0, 10)
ylim 设置 y 轴范围,格式为 (min, max) 自动根据数据 ylim=(0, 5)
xticks 自定义 x 轴刻度位置。 自动 xticks=[0, 2, 4, 6]
yticks 自定义 y 轴刻度位置。 自动 yticks=[0, 1, 2]
title 设置 Axes 的标题。 title='My Plot Title'
xlabel 设置 x 轴标签。 xlabel='X Data'
ylabel 设置 y 轴标签。 ylabel='Y Data'

4.3 Axis 类

Axis类代表Axes中的坐标轴(x轴、y轴,3D图中还包括z轴),负责控制坐标轴的刻度、标签、范围等。它包含刻度线(ticks)、刻度标签(tick labels)、轴标签(label)等元素,可通过ax.xaxisax.yaxis获取对应Axis对象,进而自定义刻度间隔(set_ticks())、刻度标签旋转(set_rotation())、轴范围(set_lim())等,例如调整x轴刻度为每月1号或设置y轴范围为0到100。

4.4 Artist 类

Artist类是Matplotlib中所有可绘制元素的基类,涵盖了Figure、Axes、Axis等容器类,以及线条(Line2D)、文本(Text)、矩形(Rectangle)、图例(Legend)等具体图形元素。所有Artist对象都拥有样式属性(如颜色color、线宽linewidth、透明度alpha),并通过draw()方法被渲染到画布上。Matplotlib的绘图过程本质上是创建和配置各种Artist对象,并将它们添加到Figure或Axes中的过程。

4.5 pyplot 模块

pyplot模块(matplotlib.pyplot)并非类,而是一个封装了底层类的函数接口集合,提供了类似Matlab的命令式绘图方式。它通过维护一个"当前Figure"和"当前Axes"的状态,允许用户用函数(如plt.plot()plt.xlabel())直接操作当前绘图区域,无需显式创建对象。例如plt.plot(x, y)会自动将线条添加到当前Axes中,plt.show()则显示当前Figure。pyplot简化了简单绘图的流程,但其状态管理依赖全局变量,复杂场景下推荐结合面向对象API使用。

相关推荐
Deng9452013145 小时前
基于大数据的电力系统故障诊断技术研究
大数据·matplotlib·深度特征提取·随机森林分类算法·标签编码
李昊哲小课2 天前
销售数据可视化分析项目
python·信息可视化·数据分析·matplotlib·数据可视化·seaborn
fen_fen3 天前
学习笔记(32):matplotlib绘制简单图表-数据分布图
笔记·学习·matplotlib
bug攻城狮4 天前
Alloy VS Promtail:基于 Loki 的日志采集架构对比与选型指南
运维·架构·grafana·数据可视化
今禾6 天前
" 当Base64遇上Blob,图像转换不再神秘,让你的网页瞬间变身魔法画布! "
前端·数据可视化
JIAKSK7 天前
VitePress 接入百度统计:全面教程与优化指南
运维·数据可视化
datagear8 天前
如何在DataGear 5.4.1 中快速制作HTTP数据源服务端分页的数据表格看板
javascript·数据可视化
wenzhangli78 天前
OneCode 图表组件核心优势解析
数据可视化
线条19 天前
Matplotlib 安装部署与版本兼容问题解决方案(pyCharm)
matplotlib