Matplotlib 是 Python 最著名的 2D 绘图库,提供了一套完整的绘图 API,可以生成出版质量级别的图形。以下是针对新版 Matplotlib (≥3.6) 的详细介绍和使用方法。
pip install --upgrade matplotlib
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'SimHei'] # 设置中文字体
plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
fig, ax = plt.subplots(figsize=(8, 4))
ax.plot(x, y, label='正弦曲线', color='blue', linewidth=2)
ax.set_title('正弦函数曲线', fontsize=14)
ax.set_xlabel('X轴', fontsize=12)
ax.set_ylabel('Y轴', fontsize=12)
ax.legend()
ax.grid(True, linestyle='--', alpha=0.6)
plt.tight_layout()
plt.show()
labels = ['苹果', '香蕉', '橙子']
values = [45, 30, 25]
fig, ax = plt.subplots(figsize=(6, 4))
bars = ax.bar(labels, values, color=['#1f77b4', '#ff7f0e', '#2ca02c'])
# 添加数据标签
for bar in bars:
height = bar.get_height()
ax.text(bar.get_x() + bar.get_width()/2., height,
f'{height}%',
ha='center', va='bottom')
ax.set_title('水果偏好调查', pad=20)
ax.set_ylabel('百分比(%)')
plt.show()
新版推荐使用 seaborn-v0_8
替代旧的 seaborn
样式:
plt.style.use('seaborn-v0_8') # 新版推荐
# 或使用白色网格背景
plt.style.use('seaborn-v0_8-whitegrid')
# 获取默认颜色循环
colors = plt.rcParams['axes.prop_cycle'].by_key()['color']
print(colors) # 新版默认10色循环
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection='3d')
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))
surf = ax.plot_surface(X, Y, Z, cmap='viridis')
fig.colorbar(surf, shrink=0.5, aspect=5)
ax.set_title('3D 曲面图')
plt.show()
fig, axs = plt.subplots(2, 2, figsize=(10, 8))
fig.suptitle('多子图示例', y=1.02)
# 子图1
axs[0, 0].plot(x, np.sin(x), 'r-')
axs[0, 0].set_title('正弦函数')
# 子图2
axs[0, 1].plot(x, np.cos(x), 'b--')
axs[0, 1].set_title('余弦函数')
# 子图3
axs[1, 0].scatter(np.random.rand(50), np.random.rand(50), c='g')
axs[1, 0].set_title('散点图')
# 子图4
axs[1, 1].hist(np.random.randn(1000), bins=30, color='purple')
axs[1, 1].set_title('直方图')
plt.tight_layout()
plt.show()
from matplotlib.animation import FuncAnimation
fig, ax = plt.subplots()
x = np.linspace(0, 2*np.pi, 200)
line, = ax.plot(x, np.sin(x))
def update(frame):
line.set_ydata(np.sin(x + frame/10))
return line,
ani = FuncAnimation(fig, update, frames=100, interval=50)
plt.show()
新版推荐保存方法:
fig.savefig('output.png',
dpi=300,
bbox_inches='tight',
facecolor='white',
edgecolor='none',
quality=95)
中文显示问题:
plt.rcParams['font.sans-serif'] = ['/path/to/your/font.ttf']
性能优化:
rasterized=True
plt.ioff()
新版弃用警告:
seaborn-v0_8
替代 seaborn
subplots()
替代 subplot()
Matplotlib 功能强大且灵活,以上只是基础介绍。建议查阅官方文档获取最新信息和更高级用法。