
关于
Matplotlib 是 Python 的基础可视化库,用于创建静态、动画和交互式图表。
name: matplotlib description: "Matplotlib 是 Python 的基础可视化库,用于创建静态、动画和交互式图表。" license: https://github.com/matplotlib/matplotlib/tree/main/LICENSE metadata: skill-author: K-Dense Inc. risk: unknown source: community
Matplotlib
概述
Matplotlib 是 Python 的基础可视化库,用于创建静态、动画和交互式图表。此技能提供有效使用 matplotlib 的指导,涵盖 pyplot 接口(MATLAB 风格)和面向对象 API(Figure/Axes),以及创建出版级可视化的最佳实践。
何时使用此技能
此技能应在以下情况使用:
- 创建任何类型的图表(折线图、散点图、柱状图、直方图、热力图、等高线图等)
- 生成科学或统计可视化
- 自定义图表外观(颜色、样式、标签、图例)
- 创建包含子图的多面板图形
- 将可视化导出为各种格式(PNG、PDF、SVG 等)
- 构建交互式图表或动画
- 处理 3D 可视化
- 将图表集成到 Jupyter notebook 或 GUI 应用中
核心概念
Matplotlib 层次结构
Matplotlib 使用分层的对象结构:
- Figure - 所有图表元素的顶层容器
- Axes - 显示数据的实际绑图区域(一个 Figure 可包含多个 Axes)
- Artist - 图形上所有可见的内容(线条、文本、刻度等)
- Axis - 数字线对象(x 轴、y 轴),处理刻度和标签
两种接口
1. pyplot 接口(隐式,MATLAB 风格)
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4])
plt.ylabel('some numbers')
plt.show()
- 适合快速、简单的图表
- 自动维护状态
- 适合交互式工作和简单脚本
2. 面向对象接口(显式)
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot([1, 2, 3, 4])
ax.set_ylabel('some numbers')
plt.show()
- 大多数场景推荐使用
- 对 figure 和 axes 有更明确的控制
- 更适合包含多个子图的复杂图形
- 更易于维护和调试
常见工作流
1. 基本图表创建
单图工作流:
import matplotlib.pyplot as plt
import numpy as np
# 创建 figure 和 axes(面向对象接口 - 推荐)
fig, ax = plt.subplots(figsize=(10, 6))
# 生成并绑制数据
x = np.linspace(0, 2*np.pi, 100)
ax.plot(x, np.sin(x), label='sin(x)')
ax.plot(x, np.cos(x), label='cos(x)')
# 自定义
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_title('Trigonometric Functions')
ax.legend()
ax.grid(True, alpha=0.3)
# 保存和/或显示
plt.savefig('plot.png', dpi=300, bbox_inches='tight')
plt.show()
2. 多子图
创建子图布局:
# 方法 1:规则网格
fig, axes = plt.subplots(2, 2, figsize=(12, 10))
axes[0, 0].plot(x, y1)
axes[0, 1].scatter(x, y2)
axes[1, 0].bar(categories, values)
axes[1, 1].hist(data, bins=30)
# 方法 2:马赛克布局(更灵活)
fig, axes = plt.subplot_mosaic([['left', 'right_top'],
['left', 'right_bottom']],
figsize=(10, 8))
axes['left'].plot(x, y)
axes['right_top'].scatter(x, y)
axes['right_bottom'].hist(data)
# 方法 3:GridSpec(最大控制力)
from matplotlib.gridspec import GridSpec
fig = plt.figure(figsize=(12, 8))
gs = GridSpec(3, 3, figure=fig)
ax1 = fig.add_subplot(gs[0, :]) # 顶行,所有列
ax2 = fig.add_subplot(gs[1:, 0]) # 底部两行,第一列
ax3 = fig.add_subplot(gs[1:, 1:]) # 底部两行,后两列
3. 图表类型和使用场景
折线图 - 时间序列、连续数据、趋势
ax.plot(x, y, linewidth=2, linestyle='--', marker='o', color='blue')
散点图 - 变量间关系、相关性
ax.scatter(x, y, s=sizes, c=colors, alpha=0.6, cmap='viridis')
柱状图 - 分类比较
ax.bar(categories, values, color='steelblue', edgecolor='black')
# 水平柱状图:
ax.barh(categories, values)
直方图 - 分布
ax.hist(data, bins=30, edgecolor='black', alpha=0.7)
热力图 - 矩阵数据、相关性
im = ax.imshow(matrix, cmap='coolwarm', aspect='auto')
plt.colorbar(im, ax=ax)
等高线图 - 2D 平面上的 3D 数据
contour = ax.contour(X, Y, Z, levels=10)
ax.clabel(contour, inline=True, fontsize=8)
箱线图 - 统计分布
ax.boxplot([data1, data2, data3], labels=['A', 'B', 'C'])
小提琴图 - 分布密度
ax.violinplot([data1, data2, data3], positions=[1, 2, 3])
如需全面的图表类型示例和变体,请参阅 references/plot_types.md。
4. 样式和自定义
颜色指定方法:
- 命名颜色
兼容工具
Claude CodeCursor
标签
数据工程
