4. Matplotlib基础:Figure与Axes概念、折线图绘制、散点图绘制、图表样式与颜色设置

大家好,我是老蓝。今天咱们聊聊Matplotlib,这个Python数据可视化的基本功。说实话,我刚开始学的时候也被Figure和Axes搞晕过,后来才发现,说白了就是一张画纸和画纸上的小格子。

4.1 Figure与Axes:理解画布与坐标系

先讲个概念。Figure就是整张画布,Axes就是画布上的坐标系区域。我习惯这么记:Figure是舞台,Axes是舞台上的演员站位。

核心关系:

  • Figure:最外层容器,可以包含多个Axes
  • Axes:实际绘图区域,包含坐标轴、刻度、数据点
  • 一个Figure可以有一个或多个Axes

来看看代码怎么写:

import matplotlib.pyplot as plt
import numpy as np

# 创建Figure和Axes
fig, ax = plt.subplots(figsize=(8, 6))

# 或者分开创建
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111)  # 1行1列第1个

嗯,这里要注意:plt.subplots()是我最常用的方式,一次搞定Figure和Axes。我在项目中遇到过有人直接用plt.plot(),其实那是隐式创建了Figure和Axes,虽然方便但不好控制。

我的习惯:总是显式创建Figure和Axes对象。这样后续修改样式、添加子图都方便。你想想看,如果后面要调整布局,没有对象引用就麻烦了。

4.2 折线图绘制:从数据到趋势

折线图是最基础的可视化方式。说白了,就是把数据点用线连起来,看趋势。

# 准备数据
x = np.linspace(0, 10, 100)
y = np.sin(x)

# 创建画布
fig, ax = plt.subplots(figsize=(10, 6))

# 绘制折线图
ax.plot(x, y, linewidth=2, label='sin(x)')

# 添加标签和标题
ax.set_xlabel('X轴')
ax.set_ylabel('Y轴')
ax.set_title('正弦函数曲线')

# 显示图例
ax.legend()

# 显示网格
ax.grid(True, alpha=0.3)

plt.show()

我曾经犯过一个错误:数据点太少,折线图看起来像锯齿。后来我养成了习惯,先看数据量,再决定是否用折线图。数据点少于20个,折线图效果其实不太好。

避坑指南:我曾经用折线图展示分类数据,结果看起来像连续变化,误导了业务方。记住:折线图适合连续数据,分类数据用柱状图更合适。

4.3 散点图绘制:发现数据分布

散点图,说白了就是看两个变量之间的关系。我经常用它来做数据探索的第一步。

# 生成随机数据
np.random.seed(42)
x = np.random.randn(200)
y = 2 * x + np.random.randn(200) * 0.5

# 创建画布
fig, ax = plt.subplots(figsize=(8, 6))

# 绘制散点图
ax.scatter(x, y, 
           alpha=0.6,      # 透明度
           s=50,           # 点大小
           c='steelblue',  # 颜色
           edgecolors='white',  # 边缘颜色
           linewidth=0.5)  # 边缘线宽

ax.set_xlabel('X变量')
ax.set_ylabel('Y变量')
ax.set_title('散点图示例:线性关系')

plt.show()

你想想看,如果数据点太多,全部显示会重叠在一起。这时候alpha参数就派上用场了。我一般设成0.5到0.7之间,既能看出密度,又不会糊成一团。

4.4 图表样式与颜色设置

样式和颜色,说白了就是让图表更好看、更专业。我刚开始做可视化时,颜色搭配得一塌糊涂,后来总结了一套方法。

4.4.1 颜色设置方式

方式 示例 说明
颜色名称 'red', 'blue', 'green' 基础颜色,简单直观
十六进制 '#FF5733' 精确控制,颜色丰富
RGB元组 (0.2, 0.4, 0.6) 范围0-1,适合程序生成
颜色映射 cmap='viridis' 连续色带,适合热力图

4.4.2 样式设置实战

# 使用内置样式
plt.style.use('seaborn-v0_8-darkgrid')

# 自定义样式
fig, ax = plt.subplots(figsize=(10, 6))

# 设置背景色
ax.set_facecolor('#f5f5f5')

# 设置坐标轴颜色
ax.spines['bottom'].set_color('#333333')
ax.spines['left'].set_color('#333333')

# 设置刻度样式
ax.tick_params(colors='#666666', labelsize=10)

# 绘制多条线
x = np.linspace(0, 10, 100)
colors = ['#FF6B6B', '#4ECDC4', '#45B7D1']
labels = ['曲线A', '曲线B', '曲线C']

for i, (color, label) in enumerate(zip(colors, labels)):
    y = np.sin(x + i * np.pi/3)
    ax.plot(x, y, color=color, linewidth=2, label=label)

ax.legend(frameon=True, facecolor='white', edgecolor='#cccccc')
plt.show()

我的配色建议:

  • 商业报告:用蓝、灰、橙,显得专业
  • 学术论文:用黑白灰,或者单色渐变
  • 演示汇报:用明亮色系,但要控制不超过5种颜色

4.5 知识体系总览

下面这张图,是我梳理的本章知识结构。你一看就明白各个概念之间的关系了。

Matplotlib基础:知识体系 Figure(画布) Axes(坐标系) Axes(坐标系) Axes(坐标系) 折线图(趋势) 散点图(分布) 更多类型... 样式设置:颜色、线型、标记、透明度、网格 一个Figure可以包含多个Axes,每个Axes可以绘制不同类型的图表

这张图把本章的核心逻辑串起来了。你看,Figure在最上层,下面挂多个Axes,每个Axes可以画折线图、散点图等。最下面是样式设置,贯穿所有图表类型。

总结一下:

  • Figure和Axes是Matplotlib的两大核心概念
  • 折线图看趋势,散点图看分布
  • 颜色和样式决定了图表的专业程度
  • 多练习,形成自己的配色习惯

好了,这一章就到这里。代码多敲几遍,你会发现Matplotlib其实没那么难。下次见!

专注资料整理