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 知识体系总览
下面这张图,是我梳理的本章知识结构。你一看就明白各个概念之间的关系了。
这张图把本章的核心逻辑串起来了。你看,Figure在最上层,下面挂多个Axes,每个Axes可以画折线图、散点图等。最下面是样式设置,贯穿所有图表类型。
总结一下:
- Figure和Axes是Matplotlib的两大核心概念
- 折线图看趋势,散点图看分布
- 颜色和样式决定了图表的专业程度
- 多练习,形成自己的配色习惯
好了,这一章就到这里。代码多敲几遍,你会发现Matplotlib其实没那么难。下次见!