PLT 数据可视化

分类: 数据处理

流程

PLT库的安装和调用

安装Matplotlib3库

pip install matplotlib

导入PLT库

import matplotlib.pyplot as plt

基本用法

例: 用 NumPy 生成数据,用 Matplotlib 把数据画成一条曲线并显示/保存

import numpy as np import matplotlib.pyplot as plt #从matplotlib中导入plt绘图工具

#随机生成数据用于绘图 x = np.arange(2,20,1) print(x) y = (x-1) ** 3 + 1 print(y)

#绘图 plt.plot(x,y)

#展示绘图 plt.show() #保存为图片 plt.savefig('test.png')

图层和工作原理

用PLT作图的层级关系

Figure(整张画布)
 └── Axes(坐标系 / 子图)
      ├── x轴
      ├── y轴
      └── 各种图形(线、点、柱子…)

Figure窗口

matplotlib(plt)里,Figure 是“整张画布 / 整个图窗口”,是所有图形的最外层容器。 可以把它理解成:一张白纸,你在上面画图。

创建Figure窗口

plt.figure()

plt.plot ..... #这个窗口内的内容

plt.show()

展示和保存Figure窗口

自动调整子图之间的间距:

plt.tight_layout()

展示绘图: plt.show() 保存为图片: plt.savefig('图片名.png')

Figure的参数

plt.figure(填入参数)

  1. figsize

控制图像的“物理大小”

figsize=(width, height)

  1. dpi

缩放, 每英寸像素点数

plt.figure(figsize=(8, 6), dpi=150)

  1. num

Figure 的 编号或名字

用于区分多个窗口

plt.figure(num=1) plt.figure(num="my_figure")

  1. facecolor

背景颜色

plt.figure(facecolor='lightgray')

  1. edgecolor

Figure 边框颜色

edgecolor='black'

  1. frameon

是否显示 Figure 边框

frameon=True

同时显示多个Figure

plt.figure()

plt.plot(10,20)

plt.figure()

plt.plot(30,40)

plt.show()

image-20251217171829274

subplo 子图

​ 用来在同一个 Figure(画布)里创建多个子图(小图)来展示不同内容

基本用法:

plt.subplot(nrows, ncols, index)

参数

  • nrows:行数
  • ncols:列数
  • index:当前子图的位置(从 1 开始)

示例

import matplotlib.pyplot as plt import numpy as np

x = np.arange(0, 10)

plt.subplot(1, 2, 1) # 1行2列,第1个 plt.plot(x, x) plt.title("y = x")

plt.subplot(1, 2, 2) # 1行2列,第2个 plt.plot(x, x**2) plt.title("y = x^2")

plt.show()

image-20251217173330080

绘制内容

展示图片

基础绘制图片

plt.imshow()

import matplotlib.pyplot as plt
import matplotlib.image as mpimg

# 读取图片
img = mpimg.imread('example.png')  # 支持png、jpg等

# 显示图片
plt.imshow(img)
plt.show()

调整坐标轴和显示效果

plt.imshow(img)
plt.axis('off')   # 关闭坐标轴
plt.title("My Image")  # 添加标题
plt.show()

灰度图显示

如果是灰度图片,可以用 cmap='gray'

plt.imshow(img, cmap='gray')
plt.axis('off')
plt.show()

绘制 NumPy 数组

你可以直接用二维数组绘制图片

import numpy as np

data = np.random.rand(100, 100)  # 生成100x100随机数组
plt.imshow(data, cmap='viridis')  # 热力图样式
plt.colorbar()
plt.show()

绘制折线图 - 趋势

plt.plot(x, y)

用途:

  • 数据变化趋势
  • 训练 loss / accuracy
  • 时间序列

实例:

import matplotlib.pyplot as plt

# x 和 y 数据
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

# 绘制折线图
plt.plot(x, y)

# 显示图形
plt.show()

解释:

  • x:横坐标数据(可选,如果不提供,默认是 [0, 1, 2, ...]
  • y:纵坐标数据(必须提供)
  • plt.show():显示图表

常用参数

plt.plot(x, y, fmt, **kwargs)

参数 作用 示例
color 线条颜色 'red''blue'
linestyle 线型 '-'(实线)、'--'(虚线)、':'(点线)
marker 数据点标记 'o''s''*'
label 图例标签 '折线1'
linewidth 线宽 2
markersize 标记大小 8
示例
plt.plot(x, y, color='green', linestyle='--', marker='o', linewidth=2, markersize=6, label='示例折线')
plt.legend()  # 显示图例
plt.show()

绘制散点图 - 点的分布

plt.scatter()

用途:

  • 数据分布
  • 线性关系
  • 聚类可视化

实例:

import matplotlib.pyplot as plt

# x 和 y 数据
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

# 绘制散点图
plt.scatter(x, y)

# 显示图形
plt.show()

解释:

  • x:横坐标数据
  • y:纵坐标数据
  • plt.show():显示图表

常用参数

plt.scatter(x, y, **kwargs)

参数 作用 示例
s 点的大小(面积) 50
c 点的颜色 'red'[1,2,3,4,5](可映射颜色)
marker 点的形状 'o'(圆)、's'(方)、'^'(三角)
alpha 点的透明度 0.5
label 图例标签 '数据点'
实例
plt.scatter(x, y, s=100, c='green', marker='^', alpha=0.6, label='示例点')
plt.legend()  # 显示图例
plt.show()

柱状图 - 对比

plt.bar(x, y)

用途:

  • 类别数量对比
  • 特征重要性

实例:

import matplotlib.pyplot as plt

# x 表示类别,y 表示数值
x = ['A', 'B', 'C', 'D']
y = [10, 15, 7, 12]

# 绘制柱状图
plt.bar(x, y)

# 显示图形
plt.show()

解释:

  • x:类别标签
  • y:对应数值
  • plt.show():显示图表

常用参数

参数 作用 示例
color 柱子颜色 'blue'['red','green','blue']
width 柱子宽度 0.5(默认 0.8)
edgecolor 柱子边框颜色 'black'
label 图例标签 '组1'
bottom 设置柱子起点 0(默认)
示例
plt.bar(x, y, color='skyblue', edgecolor='black', width=0.6, label='数量')
plt.legend()
plt.show()

水平柱状图

plt.barh(y, width)

参数含义:

  • y:每个柱子在 纵轴上的位置 / 类别
  • width:柱子的 长度(数值大小),沿 x 轴方向

直方图 - 分布情况

用途:

  • 数据是否正态
  • 查看偏态 / 离群值

绘图中的图例和属性

常用坐标与图例参数

坐标轴标签与标题

功能 方法 说明
设置x轴标签 plt.xlabel("x轴名称") 添加x轴描述
设置y轴标签 plt.ylabel("y轴名称") 添加y轴描述
设置图标题 plt.title("标题") 添加整个图的标题
标签字体 plt.xlabel(..., fontsize=12, color='red') 控制字体大小、颜色等

坐标轴显示与控制

功能 方法 说明
设置坐标轴范围 plt.xlim([xmin, xmax]) plt.ylim([ymin, ymax])
自动缩放 plt.autoscale() 根据数据自动调整坐标轴范围
反转坐标轴 plt.gca().invert_xaxis() plt.gca().invert_yaxis()
隐藏坐标轴 plt.axis('off') 隐藏坐标轴、刻度线和标签
坐标轴比例 plt.axis('equal') x、y轴单位长度相同,常用于绘制几何图形
全局控制 plt.axis([xmin, xmax, ymin, ymax]) 同时设置x、y轴范围

坐标轴刻度(ticks)相关

功能 方法 说明
设置主刻度 plt.xticks([列表]) plt.yticks([列表])
设置刻度标签 plt.xticks([列表], ['标签1','标签2']) 刻度位置对应自定义文字
刻度旋转 plt.xticks(rotation=角度) 旋转刻度标签,避免重叠
设置刻度间隔 plt.locator_params(axis='x', nbins=5) 指定刻度数量
次刻度 plt.minorticks_on() 打开次刻度显示(辅助参考线)
刻度格式化 plt.gca().xaxis.set_major_formatter(格式化器) 控制刻度显示格式,如百分比或科学计数

网格(grid)相关

功能 方法 说明
显示网格 plt.grid(True) 打开网格
控制轴方向 plt.grid(axis='x') 只显示x或y方向网格
控制线型 plt.grid(linestyle='--', color='gray', linewidth=0.5) 修改网格样式

其他图例参数

在图表中的指定位置添加文本

plt.text()

基本语法

plt.text(x, y, s, fontdict=None, **kwargs)

参数说明:

x:文本的 x 坐标(数据坐标系)

y:文本的 y 坐标(数据坐标系)

s:要显示的字符串

fontdict:可选,字体字典,如 {'size': 12, 'color': 'red', 'weight': 'bold'}

**kwargs:其他可选参数,如:

color:文字颜色

fontsize:字体大小

rotation:旋转角度

ha / va:水平/垂直对齐方式('center', 'left', 'right')

示例
import matplotlib.pyplot as plt

x = [1, 2, 3]
y = [4, 5, 6]

plt.plot(x, y, marker='o')

# 在坐标点(2,5)添加文本
plt.text(2, 5, '这是点(2,5)', color='blue', fontsize=12, ha='left', va='bottom')

plt.show()

在图中添加带箭头的注

在图中添加带箭头或指向特定点的文本注释

plt.annotate()

基本语法:
plt.annotate(
    text,                # 显示的文本
    xy,                  # 注释指向的点 (x, y)
    xytext=None,         # 文本显示的位置 (x, y),默认与 xy 相同
    xycoords='data',     # xy 的坐标系,常用 'data' 或 'axes fraction'
    textcoords='data',   # xytext 的坐标系
    arrowprops=None,     # 箭头属性字典
    fontsize=None,       # 字体大小
    color=None,          # 字体颜色
    **kwargs
)
参数说明

text:要显示的文字

xy:箭头指向的数据坐标 (x, y)

xytext:文本显示的坐标 (x, y),可以不与箭头重合

xycoords / textcoords:坐标系,可选:

'data' → 数据坐标

'axes fraction' → 图像轴的比例坐标(0~1)

arrowprops:箭头样式字典,例如:

arrowprops = dict(facecolor='black', shrink=0.05)

示例
简单注释

image-20251217203847465

import matplotlib.pyplot as plt

x = [1, 2, 3]
y = [4, 5, 6]

plt.plot(x, y, marker='o')



for i, j in zip(x, y):
    plt.annotate(f'({i},{j})', xy=(i,j), xytext=(i+0.1,j+0.1),
                 arrowprops=dict(arrowstyle='->', color='gray'))


plt.show()

标注每个点(遍历)

image-20251217204038253

import matplotlib.pyplot as plt

x = [1, 2, 3]
y = [4, 5, 6]

plt.plot(x, y, marker='o')

for i, j in zip(x, y):
    plt.annotate(f'({i},{j})', xy=(i,j), xytext=(i+0.1,j+0.1),
                 arrowprops=dict(arrowstyle='->', color='gray'))

plt.show()

在整个figure 坐标系中放文字

plt.figtext() - 在 整个 Figure(画布)上 添加文本的函数

基本语法:

matplotlib.pyplot.figtext(x, y, s, fontdict=None, **kwargs)

常见参数

x:文本的水平位置(0~1,0是左边,1是右边)

y:文本的垂直位置(0~1,0是底部,1是顶部)

s:文本内容(字符串)

fontdict:字体字典,可以设置字体大小、颜色、样式等

**kwargs:其他参数,如 colorha(水平对齐)、va(垂直对齐)等

示例

image-20251217204355507

import matplotlib.pyplot as plt

plt.plot([1, 2, 3], [4, 5, 6])

# 在Figure左下角添加文本
plt.figtext(0.1, 0.1, "这是Figure上的文本", fontsize=12, color='red')

plt.show()