当前位置: 首页 > news >正文

Python - 数据分析三剑客之Matplotlib

Matplotlib 是 Python 最著名的 2D 绘图库,它提供了一个交互式环境,可以生成各种静态、动态和交互式的图表。

一、Matplotlib 简介

1、主要特点

  • 跨平台:支持 Windows、Linux 和 Mac OS X

  • 多输出格式:支持 PNG、PDF、SVG 等多种格式

  • 高度可定制:几乎可以控制图形的每个元素

  • 多种图形类型:线图、柱状图、散点图、等高线图等

  • 与 NumPy 无缝集成:完美支持 NumPy 数组

2、主要组件

  • pyplot:提供类似 MATLAB 的绘图接口

  • pylab:将 pyplot 与 numpy 合并到一个命名空间(不推荐使用)

  • Figure:顶级容器,包含所有图表元素

  • Axes:实际的绘图区域,包含坐标轴、标签等

官方案例库

https://matplotlib.org/stable/gallery/index.htmlhttps://matplotlib.org/stable/gallery/index.html 

二、Matplotlib基本使用方法

(一)安装

1、安装 Matplotlib

pip install matplotlib

2、Matplotlib图像主要组成部分

Matplotlib图像的主要组成部分包括:

画布(figure):画布是所有绘制元素的顶级容器,可将其视为一张白纸,供我们后期创作;

轴域(axes):轴域是图中绘制数据的矩形区域,每个画布可以包含一个或多个轴,轴提供坐标系;

标题(title):标题是一个文本元素,通常用于提供所绘图像的信息;

轴标签(x label,y label):标签是为 x 轴和 y 轴提供描述的文本元素,用于提供单位或其他相关信息;

图例(legend):图例用于指示图中不同元素的含义;

网格线(grid):网格线用于帮助读者对齐刻度线,从而更准确地读取数据点的位置和值。

3、创建空白画布

在使用Matplotlib绘制图形时,其中有两个最为常用的场景。一个是画点,一个是画线。pyplot基本方法的使用如下表:

plt.figure(num=None,figsize=None,dpi=None,facecolor=None,edgecolor=None,frameon=True) 

num:画布编号,默认值为1;

figsize:指定画布宽高,默认为(6.4,4.8);

dpi:图像分辨率,单位为pixel/inch,默认值为80;

facecolor:背景颜色,默认值为白色;

edgecolor:边框颜色;

frameon:是否显示边框,默认显示。

import numpy as np
from matplotlib import pyplot as plt
fig=plt.figure(figsize=(8,6),dpi=100,facecolor='c') # 创建一个尺寸为(8,6),分辨率为100dpi,背景色为青色的画布
plt.show()

4、基本绘图 

import matplotlib.pyplot as plt
import numpy as np# 创建数据
x = np.linspace(0, 10, 100)
y = np.sin(x)# 创建图形
plt.figure(figsize=(8, 4))  # 设置图形大小# 绘制曲线
plt.plot(x, y, label='sin(x)', color='blue', linewidth=2)# 添加标题和标签
plt.title('Sine Wave')
plt.xlabel('x axis')
plt.ylabel('y axis')# 添加图例
plt.legend()# 显示网格
plt.grid(True)# 显示图形
plt.show()

(二)常用图表类型

1、折线图

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

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

api: plt.plot(x, y)

plt.plot(x, y1, label='Line 1')
plt.plot(x, y2, label='Line 2')

plt.plot(x,y,*args)

主要设置参数有:color(c,颜色)、linestyle(ls,线型)、marker(点标记)、linewidth(lw,线宽),markersize(标记大小)、markerfacecolor(mfc,标记填充色),label(标签,与图例配合使用)、alpha(透明度,取值为0-1,0为完全透明,1为完全不透明)等。

其中主要颜色有:

r(red)

红色

b(blue)

蓝色

g(green)

绿色

y(yellow)

黄色

k(black)

黑色

w(white)

白色

c(cyan)

青色

m(magenta)

洋红色 

此外,还支持十六进制的RGB色号,如:

主要线型有:

-

solid

--

dashed

-.

dashdot

:

dotted

主要点标记有: 

markerdescriptionmarkerdescription
"."point","pixel
"o"circle"v"triangle_down
"^"triangle_up"<"triangle_left
">"triangle_right"1"tri_down
"2"tri_up"3"tri_left
"4"tri_right"8"octagon
"s"square"p"pentagon
"P"plus (filled)"*"star
"h"hexagon1"H"hexagon2
"+"plus"x"x
"X"x (filled)"D"diamond
"d"thin_diamond"|"vline
"_"hline

其样式如下:

2、散点图 

散点图: 用两组数据构成多个坐标点,考察坐标点的分布 , 判断两变量之间是否存在某种关联或总结坐标
点的分布模式。
特点:判断变量之间是否存在数量关联趋势 , 展示离群点 ( 分布规律 )
api: plt.scatter(x, y)

x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]
plt.scatter(x, y, color='red') # 绘制红色散点图
plt.title("Simple Scatter Plot") # 设置图表标题
plt.xlabel("X-axis") # 设置X轴标签
plt.ylabel("Y-axis") # 设置Y轴标签
plt.show() # 显示图表

3、柱状图

柱状图: 排列在工作表的列或行中的数据可以绘制到柱状图中。
特点:绘制连离散的数据 , 能够一眼看出各个数据的大小 , 比较数据之间的差别。 ( 统计 / 对比 )

api: plt.bar(x, width, align='center', **kwargs)
Parameters:
x : 需要传递的数据
width : 柱状图的宽度
align : 每个柱状图的位置对齐方式
{'center', 'edge'}, optional, default: 'center'
**kwargs :
color: 选择柱状图的颜色

categories = ['A', 'B', 'C', 'D']
values = [3, 7, 5, 4]
plt.bar(categories, values, color='blue') # 绘制蓝色柱状图
plt.title("Simple Bar Chart") # 设置图表标题
plt.xlabel("Categories") # 设置X轴标签
plt.ylabel("Values") # 设置Y轴标签
plt.show() # 显示图表

4、饼图

饼图: 用于表示不同分类的占比情况,通过弧度大小来对比各种分类。
特点:分类数据的占比情况 ( 占比 )

api: plt.pie(x, labels=,autopct=,colors)
Parameters:
x: 数量,自动算百分比
labels: 每部分名称
autopct: 占比显示指定 %1.2f%%
colors: 每部分颜色

sizes = [25, 35, 25, 15]
labels = ['Category A', 'Category B', 'Category C', 'Category D']
plt.pie(sizes, labels=labels, autopct='%1.1f%%') # 绘制饼图,显示百分比
plt.title("Simple Pie Chart") # 设置图表标题
plt.show() # 显示图表

5、直方图

由一系列高度不等的纵向条纹或线段表示数据分布的情况。 一般用横轴表示数据范围,纵轴表示分布情况。
特点:绘制连续性的数据展示一组或者多组数据的分布状况 ( 统计 )

api: matplotlib.pyplot.hist(x, bins=None)
Parameters:
x : 需要传递的数据
bins : 组距

# 1. 生成数据
data = np.random.randn(500) # 生成500个服从标准正态分布的随机数
# 2. 创建画布
plt.figure(figsize=(10, 6))
# 3. 绘制直方图
plt.hist(data, bins=30, color='blue', alpha=0.7, rwidth=0.85)
# 4. 添加标题和标签
plt.title("Histogram of Normally Distributed Data")
plt.xlabel("Value")
plt.ylabel("Frequency")
# 5. 显示图像
plt.grid(True)
plt.show()
参数说明
bins=30:将数据分成 30 个等宽的区间,每个区间的宽度相同,统计每个区间内数据的频率。
color='blue':设置直方图条形为蓝色。
alpha=0.7:设置条形的透明度为 0.7,使得条形稍微透明。
rwidth=0.85:将条形的宽度设为区间宽度的 85%,留下 15% 的间隔,以便更清晰地分辨各个条形。

(三)高级功能

1、多子图

多子图可由以下两种方式绘制。

方式一:

fig=plt.figure(facecolor='lightblue')x1=np.linspace(0,2*np.pi,200)
y1=np.sin(x1)
plt.subplot(2,2,1) # 一共2×2个子图,此为第一个
plt.plot(x1,y1,linestyle='-',color='b',label='y=sin(x)')
plt.title('y=sin(x)')
plt.xlabel('x',loc='right')
plt.ylabel('y',loc='top')
plt.grid(alpha=0.8)
x_ticks=np.linspace(0,2*np.pi,5)
x_labels=['0','π/2','π','3π/2','2π']
plt.xticks(x_ticks,x_labels)
plt.yticks(np.linspace(-1,1,5))x2=np.linspace(0,2*np.pi,200)
y2=np.cos(x2)
plt.subplot(2,2,2) # 一共2×2个子图,此为第二个
plt.plot(x2,y2,linestyle='--',color='g',label='y=cos(x)')
plt.title('y=cos(x)')
plt.xlabel('x',loc='right')
plt.ylabel('y',loc='top')
plt.grid(axis='y',alpha=0.5)
plt.xticks(x_ticks,x_labels)
plt.yticks(np.linspace(-1,1,5))x3=np.linspace(0,10,200)
y3=np.exp(x3)
plt.subplot(2,2,3) # 一共2×2个子图,此为第三个
plt.plot(x3,y3,linestyle='-.',color='orange',alpha=0.7,label='y=e^x')
plt.title('y=e^x')
plt.xlabel('x',loc='right')
plt.ylabel('y',loc='top')x4=np.linspace(0.01,10,200)
y4=np.log10(x4)
plt.subplot(2,2,4) # 一共2×2个子图,此为第四个
plt.plot(x4,y4,linestyle=':',color='r',alpha=0.6,label='y=lg(x)')
plt.title('y=lg(x)')
plt.xlabel('x',loc='right')
plt.ylabel('y',loc='top')plt.tight_layout() # 自动调整布局(紧凑布局)
plt.show()

方式二:

fig,ax=plt.subplots(2,2) # 这种创建方式会返回fig、ax两个对象,其中ax是一个轴域列表,形状与子图的形状一致
ax1,ax2,ax3,ax4=ax.flatten() # 可以将列表展平后逐个取出x1=np.linspace(0,2*np.pi,200)
y1=np.sin(x1)
ax1.plot(x1,y1,label='y=sin(x)')
ax1.set_title('y=sin(x)')x2=np.linspace(0,2*np.pi,200)
y2=np.cos(x2)
ax2.plot(x2,y2,label='y=cos(x)')
ax2.set_title('y=cos(x)')x3=np.linspace(0,10,200)
y3=np.exp(x3)
ax3.plot(x3,y3,label='y=e^x')
ax3.set_title('y=e^x')x4=np.linspace(-5,5,200)
y4=np.power(x4,2)
ax4.plot(x4,y4,label='y=x^2')
ax4.set_title('y=x^2')plt.tight_layout()
plt.show()

2、3D 绘图

matplotlib支持绘制三维线框图, 三维曲面图, 三维散点图. 需要使用axes3d提供3d坐标系

import numpy as np
import matplotlib.pyplot as pltfig = plt.figure()
ax3d = fig.add_subplot(121, projection='3d')# filled为bool类型数组,在True的元素下标位置绘制体元素
i, j, k = np.indices((3, 3, 3))
filled = (i == j) & (j == k)  # 3行3列3层,对角线为True
c = plt.get_cmap('RdBu')(np.linspace(0, 1, 27)).reshape(3, 3, 3, 4)# ax3d.voxels(filled)             #filled为True的位置绘制六面体
ax3d.voxels(filled, facecolors=c)  # filled为True的位置绘制六面体,并设置颜色#
ax3d = fig.add_subplot(122, projection='3d')
# x,y,z=np.indices((3,4,5))
# ax3d.voxels(x,y,z,filled)plt.show()

3、自定义样式

plt.style.use('ggplot')  # 使用ggplot风格
# 其他可用风格:'seaborn', 'fivethirtyeight'等

(四)保存图形

plt.savefig('figure.png', dpi=300, bbox_inches='tight')

Matplotlib 功能强大且灵活,几乎可以创建任何类型的可视化图表。对于更高级的数据可视化,可以结合使用 Pandas 和 Seaborn 库。

参考文章

【Matplotlib基本使用】-CSDN博客

Python:Matplotlib详细使用_matplotlib在python中的用法-CSDN博客

http://www.dtcms.com/a/309777.html

相关文章:

  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘altair’问题
  • Apache Flink 2.1.0: 面向实时 Data + AI 全面升级,开启智能流处理新纪元
  • 从游戏NPC到手术助手:Agent AI重构多模态交互,具身智能打开AGI新大门
  • AI 重塑软件产业:从技术革命到生态重构
  • 超聚变:智能体时代,AI原生重构城企数智化基因
  • 技术信任革命:区块链重构信用机制全解析
  • 国内用户如何用手机进行YouTube直播?
  • 【CDH × Docker】一次测试部署,N 次复用的环境镜像方案
  • 9.1无法恢复的错误与 panic!
  • 基于Ascend CANN的FFmpeg与OpenCV编译指南
  • 观测云基于 ToB/ToC 业务可观测最佳实践
  • 蚂蚁开源团队发布的2025大模型开源开发生态发展情况速览
  • AI+向量化
  • 在Idea中,配置maven
  • Web安全学习步骤
  • R 语言文件读写、批量读取与图片保存实用代码汇总
  • 使用BART模型和T5模型实现文本改写
  • k8s部署mysql
  • Web学习:SQL注入之联合查询注入
  • 逻辑回归建模核心知识点梳理:原理、假设、评估指标与实战建议
  • Codeforces Round 1040 (Div. 2) E1 - E3 交互题 | 思维
  • go语言实现协程池
  • leetcode 118. 杨辉三角 简单
  • django操作orm整套
  • android MVC/MVP/MVVM/MVI架构发展历程和编写范式
  • 如何在Android中创建自定义键盘布局
  • MySQL时间处理完全指南:从存储到查询优化
  • Apache RocketMQ中 Consumer Group(消费者组)的详细说明
  • 2025新征程杯全国54校园足球锦标赛在北京世园公园隆重开幕
  • 使用Nginx部署前端项目