Matplotlib 数据可视化指南:从入门到实战

数据可视化是数据分析的核心环节,而 Matplotlib 是 Python 生态中最经典、最常用的可视化库,无论是科研绘图、业务报表还是日常数据分析,都能完美胜任。它支持折线图、柱状图、散点图、直方图等几乎所有常用图表,还能精细化调整样式,满足从入门到专业的所有需求。

本文全程以代码示例为主,从基础安装、简单绘图,到进阶样式调整、多子图、常用图表实战,带你快速掌握 Matplotlib 核心用法,复制代码即可直接运行!

一、环境准备:安装 Matplotlib

首先确保已安装 Matplotlib,打开终端执行一行命令即可:

bash 复制代码
pip install matplotlib

二、基础入门:第一个 Matplotlib 图表

Matplotlib 最核心的模块是 pyplot,我们通常简写为 plt 使用。先从最简单的折线图开始,这是所有可视化的基础。

1. 最简折线图(无任何多余配置)

python 复制代码
import matplotlib.pyplot as plt

# AttributeError: 'FigureCanvasInterAgg' object has no attribute 'tostring_rgb'. Did you mean: 'tostring_argb'?
# PyCharm + Matplotlib 版本不兼容导致的经典报错
import matplotlib
matplotlib.use('TkAgg')  # 加上这一句!

# 准备数据
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

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

运行效果 :弹出一个窗口,显示一条从左下到右上的直线,这是 Matplotlib 最基础的绘图流程。

2. 基础图表:添加标题、坐标轴标签

实际使用中,我们需要给图表添加说明,让数据更易读:

python 复制代码
import matplotlib.pyplot as plt

# AttributeError: 'FigureCanvasInterAgg' object has no attribute 'tostring_rgb'. Did you mean: 'tostring_argb'?
# PyCharm + Matplotlib 版本不兼容导致的经典报错
import matplotlib
matplotlib.use('TkAgg')


# 解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

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

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

# 添加标题
plt.title("折线图示例", fontsize=16)
# 添加标签
plt.xlabel("X轴", fontsize=12)
# 添加标签
plt.ylabel("Y轴", fontsize=12)

plt.show()

三、核心常用图表:代码直接复制使用

Matplotlib 支持数十种图表,这里整理工作中最常用的 5 种图表,附带完整可运行代码。

1. 折线图(多组数据 + 样式自定义)

折线图适合展示数据随时间 / 序列的变化趋势,支持自定义颜色、线型、标记点:

python 复制代码
import matplotlib.pyplot as plt
import numpy as np

# 生成连续数据(0-10,共100个点)
x = np.linspace(0, 10, 100)
y1 = np.sin(x)   # 正弦曲线
y2 = np.cos(x)   # 余弦曲线

# 绘制两条折线,自定义样式
plt.plot(x, y1, color="red", linestyle="-", linewidth=2, label="sin(x)")
plt.plot(x, y2, color="blue", linestyle="--", linewidth=2, label="cos(x)")

# 添加图例、网格、标题
plt.legend()  # 显示图例(依赖label参数)
plt.grid(True, alpha=0.3)  # 添加网格,alpha=透明度
plt.title("正弦&余弦曲线", fontsize=14)

plt.show()

2. 柱状图(对比分类数据)

柱状图用于对比不同分类的数据大小,是业务分析最常用的图表:

python 复制代码
import matplotlib.pyplot as plt
import numpy as np
# PyCharm + Matplotlib 版本不兼容导致的经典报错
import matplotlib
matplotlib.use('TkAgg')


# 解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 分类数据
categories = ["产品A", "产品B", "产品C", "产品D"]
sales = [350, 520, 280, 450]  # 销量数据
plt.bar(categories, sales, color=["#FF6B6B", "#FFD166", "#06D6A0", "#118AB2"])

# 添加数值标签
for i, v in enumerate(sales):
    plt.text(i, v, str(v), ha="center", va="bottom")
    plt.title("产品销量统计")

# 图表说明
plt.xlabel("产品")
plt.ylabel("销量")
plt.grid(True, which="major", axis="y", linestyle="--", linewidth=0.5, color="gray", alpha=0.5)
plt.show()

3. 散点图(展示变量相关性)

散点图用于展示两个变量之间的关系 / 相关性,比如身高与体重、广告投入与销量:

python 复制代码
import matplotlib.pyplot as plt
import numpy as np
# PyCharm + Matplotlib 版本不兼容导致的经典报错
import matplotlib

matplotlib.use('TkAgg')

# 解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 随机生成数据
# 生成100个0-10的随机数
x = np.random.rand(100)
# 线性相关加噪声
y = x * 2 + np.random.randn(100) * 0.1

# 绘制散点图, s=点大小, alpha=透明度, c=颜色, edgecolors=边框颜色
plt.scatter(x, y, s=50, alpha=0.5, c='red', edgecolors='pink')

# 标题和标签
plt.title('散点图')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.grid(True, which='major', axis='both', linestyle='--', linewidth=0.5, color='gray', alpha=0.5)
plt.show()

4. 直方图(展示数据分布)

直方图用于展示数据的分布规律(如成绩分布、年龄分布、薪资分布):

python 复制代码
import matplotlib.pyplot as plt
import numpy as np
# PyCharm + Matplotlib 版本不兼容导致的经典报错
import matplotlib

matplotlib.use('TkAgg')

# 解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 生成正态分布数据
x = np.random.randn(1000)

# 绘制直方图, bins分组数量=30,颜色为红色,透明度为0.5, 边框颜色为粉色
plt.hist(x, bins=30, color='#FF6B6B', alpha=0.5, edgecolor='pink')

# 添加标题
plt.title('正态分布直方图')
# 添加x轴标签
plt.xlabel('数据值')
# 添加y轴标签
plt.ylabel('频数')

plt.show()

5. 饼图(展示占比关系)

饼图用于展示各部分占整体的比例,如市场份额、支出结构:

python 复制代码
import matplotlib.pyplot as plt
import numpy as np
# PyCharm + Matplotlib 版本不兼容导致的经典报错
import matplotlib

matplotlib.use('TkAgg')

# 解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 数据
labels = ["餐饮", "购物", "交通", " Entertainment", "医疗", "教育", "其他"]
sizes = [15, 30, 20, 25, 10, 15, 10]
colors = ["#FF6B6B", "#FFD166", "#06D6A0", "#118AB2", "#F72585", "#F77F00", "#F9D423"]

# 绘制饼图,autopct=显示百分比,explode=突出显示某一块
plt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%', explode=[0.1, 0, 0, 0, 0, 0, 0])
plt.title("消费占比")
# 设置饼图的半径, 保证饼图是正圆
plt.axis('equal')
plt.show()

四、进阶用法:多子图(一张画布画多个图表)

实际分析中,我们经常需要在一张图里展示多个子图 ,Matplotlib 用 subplot 轻松实现:

python 复制代码
import matplotlib.pyplot as plt
import numpy as np
# PyCharm + Matplotlib 版本不兼容导致的经典报错
import matplotlib

matplotlib.use('TkAgg')

# 解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 创建画布,2行2列,共四个子图
fig, axs = plt.subplots(2, 2)

# 子图1:折线图
axs[0, 0].plot([1, 2, 3, 4], [10, 20, 30, 40])

# 子图2:柱状图
axs[0, 1].bar([1, 2, 3, 4], [10, 20, 30, 40])

# 子图3:散点图
axs[1, 0].scatter([1, 2, 3, 4], [10, 20, 30, 40])

# 子图4:饼图
axs[1, 1].pie([10, 20, 30, 40], labels=['A', 'B', 'C', 'D'])

# 自动调整子图距离
plt.tight_layout()
plt.show()

五、实用技巧:保存高清图片

绘制好的图表可以直接保存为PNG、PDF、SVG 等格式,支持设置分辨率(适合论文、报告):

python 复制代码
import matplotlib.pyplot as plt

x = [1,2,3,4,5]
y = [2,4,6,8,10]
plt.plot(x, y)

# 保存图片(dpi=分辨率,越高越清晰) 自动裁剪图表多余空白
plt.savefig("my_plot.png", dpi=300, bbox_inches="tight")
plt.close()

六、总结

Matplotlib 是 Python 数据可视化的基石,核心用法非常简单:

  1. 导入模块:import matplotlib.pyplot as plt

  2. 准备数据:列表 / 数组均可

  3. 绘制图表:plt.plot()/plt.bar()/plt.scatter()

  4. 添加样式:标题、标签、图例、网格

  5. 显示 / 保存:plt.show()/plt.savefig()

本文所有代码复制即可运行,覆盖日常分析 90% 的可视化场景。熟练掌握这些基础用法后,再结合 Pandas、Seaborn 等库,能轻松完成更复杂的数据分析与可视化工作。


  1. Matplotlib 核心模块是 pyplot,简写 plt 是行业通用习惯;

  2. 常用图表:折线图 (趋势)、柱状图 (对比)、散点图 (相关性)、直方图 (分布)、饼图 (占比);

  3. 基础流程:导库→准备数据→绘图→美化→显示 / 保存;

  4. 多子图用 subplot,保存高清图用 savefig\(dpi=300\)

相关推荐
jay神2 小时前
基于 YOLOv8 的PCB 缺陷检测系统
python·深度学习·yolo·目标检测·信息可视化·毕业设计
财经资讯数据_灵砚智能3 小时前
基于全球经济类多源新闻的NLP情感分析与数据可视化(日间)2026年4月12日
大数据·人工智能·信息可视化·自然语言处理·ai编程
Highcharts.js3 小时前
企业级数据可视化|BI 仪表板数据中台工业监控平台的选择分析
人工智能·python·信息可视化·数据挖掘·数据分析·highcharts
干词4 小时前
“干词”和“不背单词”可以一起使用!
信息可视化·雅思·翻译软件·背单词·干词·不背单词·自学英语
a1117764 小时前
变电站数字孪生大屏ThreeJS 开源项目
前端·信息可视化·开源·html
代码小书生18 小时前
Matplotlib,Python 数据可视化核心库!
python·信息可视化·matplotlib
城数派21 小时前
2000-2025年我国省市县三级逐8天日间地表温度数据(Shp/Excel格式)
数据库·arcgis·信息可视化·数据分析·excel
天泽恒晟21 小时前
适老化到适我化—摄像头的选择
科技·信息可视化·生活·智能家居·交互
2301_822703201 天前
光影进度条:鸿蒙Flutter实现动态光影效果的进度条
算法·flutter·华为·信息可视化·开源·harmonyos