文章目录

matplotlib.pyplot它是 Python 中最常用的数据可视化库,支持绘制各种静态、动态、交互式图表,广泛应用于数据分析、科学计算和学术研究中。

一、matplotlib.pyplot 简介

  • 功能:提供类似 MATLAB 的绘图接口,可绘制线图、散点图、柱状图、直方图、饼图、热力图等几乎所有常见图表。
  • 优势:高度可定制,支持调整图表样式、颜色、标签等细节,输出高质量图像(如 PNG、PDF、SVG 等格式)。

二、基础使用步骤

  1. 安装

    pip install matplotlib
    
  2. 导入

    import matplotlib.pyplot as plt
    import numpy as np  # 常与NumPy配合生成数据
    
  3. 核心流程

    • 准备数据(如 NumPy 数组、列表)。
    • 调用绘图函数(如 plt.plot()plt.scatter())。
    • 添加标签、标题、图例等装饰。
    • 显示或保存图表(plt.show()plt.savefig())。

三、常用图表及代码示例

1. 线图(Line Plot)

用于展示数据随时间或连续变量的变化趋势。

# 准备数据
x = np.linspace(0, 10, 100)  # 0到10之间的100个均匀点
y1 = np.sin(x)
y2 = np.cos(x)

# 绘制线图
plt.plot(x, y1, label='sin(x)', color='blue', linestyle='-', linewidth=2)  # 实线
plt.plot(x, y2, label='cos(x)', color='red', linestyle='--', linewidth=2)   # 虚线

# 添加装饰
plt.title('正弦函数与余弦函数曲线', fontsize=14)  # 标题
plt.xlabel('x轴', fontsize=12)                  # x轴标签
plt.ylabel('y轴', fontsize=12)                  # y轴标签
plt.legend(loc='upper right')                   # 图例(位置右上角)
plt.grid(alpha=0.3)                             # 网格线(透明度0.3)
plt.xlim(0, 10)                                 # x轴范围
plt.ylim(-1.2, 1.2)                             # y轴范围

# 显示图表
plt.show()
2. 散点图(Scatter Plot)

用于展示两个变量之间的关系或分布规律。

# 准备数据(随机点)
np.random.seed(42)  # 固定随机种子,确保结果可复现
x = np.random.randn(100)  # 100个符合正态分布的x值
y = 2 * x + np.random.randn(100) * 0.5  # y与x近似线性相关,加噪声
sizes = np.random.randint(20, 100, 100)  # 点的大小(20-100之间随机)
colors = np.random.rand(100)  # 点的颜色(0-1随机,用于映射颜色条)

# 绘制散点图
plt.scatter(x, y, s=sizes, c=colors, alpha=0.7, cmap='viridis')  # cmap指定颜色映射

# 添加装饰
plt.title('带颜色和大小的散点图', fontsize=14)
plt.xlabel('x', fontsize=12)
plt.ylabel('y', fontsize=12)
plt.colorbar(label='颜色值')  # 显示颜色条
plt.grid(alpha=0.3)

# 显示图表
plt.show()
3. 柱状图(Bar Plot)

用于比较不同类别的数据(离散数据)。

# 准备数据
categories = ['A', 'B', 'C', 'D', 'E']  # 类别
values1 = [23, 45, 56, 12, 34]          # 第一组数据
values2 = [18, 32, 49, 15, 28]          # 第二组数据

# 设置柱状图位置
x = np.arange(len(categories))  # 类别索引(0,1,2,3,4)
width = 0.35                    # 柱宽

# 绘制柱状图
plt.bar(x - width/2, values1, width, label='数据1', color='skyblue')
plt.bar(x + width/2, values2, width, label='数据2', color='orange')

# 添加装饰
plt.title('两组数据的柱状图对比', fontsize=14)
plt.xlabel('类别', fontsize=12)
plt.ylabel('数值', fontsize=12)
plt.xticks(x, categories)  # 用类别名替换x轴刻度
plt.legend()
plt.grid(axis='y', alpha=0.3)  # 仅显示y轴网格

# 显示图表
plt.show()
4. 直方图(Histogram)

用于展示连续数据的分布特征(频率分布)。

# 准备数据(正态分布随机数)
np.random.seed(42)
data = np.random.randn(1000)  # 1000个符合标准正态分布的数

# 绘制直方图
plt.hist(data, bins=30, density=True, alpha=0.7, color='green')  # bins:分箱数;density:归一化

# 叠加理论概率密度曲线
x = np.linspace(-4, 4, 100)
pdf = (1 / np.sqrt(2 * np.pi)) * np.exp(-x**2 / 2)  # 标准正态分布概率密度函数
plt.plot(x, pdf, color='red', linewidth=2, label='理论分布')

# 添加装饰
plt.title('正态分布数据的直方图', fontsize=14)
plt.xlabel('数值', fontsize=12)
plt.ylabel('频率', fontsize=12)
plt.legend()
plt.grid(alpha=0.3)

# 显示图表
plt.show()
5. 饼图(Pie Chart)

用于展示各部分占总体的比例。

# 准备数据
labels = ['苹果', '香蕉', '橙子', '葡萄']  # 类别
sizes = [35, 25, 20, 20]                  # 占比(总和100)
explode = (0.1, 0, 0, 0)                  # 突出第一部分(苹果)
colors = ['red', 'yellow', 'orange', 'purple']

# 绘制饼图
plt.pie(sizes, explode=explode, labels=labels, colors=colors,
        autopct='%1.1f%%',  # 显示百分比(保留1位小数)
        shadow=True,        # 阴影效果
        startangle=90)      # 起始角度(90度:从顶部开始)

# 设置为正圆形(默认可能椭圆)
plt.axis('equal')

# 添加标题
plt.title('水果销量占比', fontsize=14)

# 显示图表
plt.show()
6. 子图(Subplots)

在一个画布上绘制多个图表,便于对比。

# 创建2行2列的子图(共4个子图)
fig, axes = plt.subplots(2, 2, figsize=(10, 8))  # figsize:画布大小(宽×高)

# 子图1:线图
x = np.linspace(0, 10, 100)
axes[0, 0].plot(x, np.sin(x), color='blue')
axes[0, 0].set_title('sin(x)')

# 子图2:散点图
axes[0, 1].scatter(np.random.randn(50), np.random.randn(50), color='red')
axes[0, 1].set_title('随机散点')

# 子图3:柱状图
axes[1, 0].bar(['A', 'B', 'C'], [10, 20, 15], color='green')
axes[1, 0].set_title('柱状图')

# 子图4:直方图
axes[1, 1].hist(np.random.randn(1000), bins=20, color='orange')
axes[1, 1].set_title('直方图')

# 调整子图间距
plt.tight_layout()

# 显示图表
plt.show()

四、进阶技巧

  1. 中文显示:matplotlib 默认不支持中文,需手动设置字体:

    plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"]  # 支持中文
    plt.rcParams["axes.unicode_minus"] = False  # 解决负号显示问题
    
  2. 保存图片:使用 plt.savefig() 保存为高清图片:

    plt.savefig('my_plot.png', dpi=300, bbox_inches='tight')  # dpi:分辨率;bbox_inches:去除白边
    
  3. 样式设置:使用内置样式美化图表:

    plt.style.use('seaborn-v0_8-whitegrid')  # 应用seaborn风格
    # 其他可选样式:'ggplot'、'bmh'、'grayscale'等
    

五、总结

matplotlib.pyplot 是 Python 数据可视化的基础工具,核心特点是:

  • 支持多种图表类型,满足不同可视化需求。
  • 高度可定制,从颜色、线条到标签、图例均可调整。
  • 与 NumPy、Pandas 等数据处理库无缝配合。

掌握它可以帮助你快速将数据转化为直观的图表,无论是日常分析还是学术报告都非常实用。

Logo

永洪科技,致力于打造全球领先的数据技术厂商,具备从数据应用方案咨询、BI、AIGC智能分析、数字孪生、数据资产、数据治理、数据实施的端到端大数据价值服务能力。

更多推荐