本文目录导读:

- 基础折线图与样式自定义
- 柱状图与条形图
- 饼图与突出显示
- 散点图与颜色映射
- 直方图与正态分布拟合
- 子图(Subplots)布局
- 3D 曲面图(mplot3d)
- 动态实时更新(动画)
- 甘特图(横道图)—— 常用于项目管理
- 热力图(Heatmap)
- 总结:这些案例覆盖了什么?
基础折线图与样式自定义
场景:展示简单的函数曲线(如温度变化、股票趋势)
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y, label='sin(x)', color='blue', linestyle='--', linewidth=2)
plt.plot(x, np.cos(x), label='cos(x)', color='red', marker='o', markersize=3)
plt.xlabel('x')
plt.ylabel('y')'正弦与余弦曲线')
plt.legend()
plt.grid(True)
plt.show()
关键点:plot() 的 color, linestyle, marker, label, legend(), grid()。
柱状图与条形图
场景:分类数据对比(如不同班级成绩、销售额)
categories = ['A', 'B', 'C', 'D']
values = [23, 45, 56, 12]
plt.bar(categories, values, color=['#FF6B6B', '#4ECDC4', '#45B7D1', '#F9CA24'])'柱状图示例')
plt.xlabel('类别')
plt.ylabel('数值')
plt.show()
关键点:bar()(垂直)、barh()(水平),可指定颜色列表。
饼图与突出显示
场景:占比分布(如市场份额、预算分配)
labels = ['Python', 'JavaScript', 'Java', 'C++']
sizes = [40, 30, 20, 10]
explode = (0.1, 0, 0, 0) # 突出第一个扇形
plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%',
shadow=True, startangle=90)'编程语言受欢迎度')
plt.show()
关键点:pie() 的 autopct 显示百分比,explode 分离扇形。
散点图与颜色映射
场景:两个连续变量的关系(如身高与体重,带颜色表示分组)
np.random.seed(0)
x = np.random.randn(100)
y = 2 * x + np.random.randn(100) * 0.5
colors = np.random.rand(100)
plt.scatter(x, y, c=colors, cmap='viridis', alpha=0.7, s=50)
plt.colorbar(label='颜色值')'散点图(颜色映射)')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()
关键点:scatter() 的 c(颜色数组)、cmap、alpha、s(点大小)、colorbar()。
直方图与正态分布拟合
场景:数据分布统计(如身高、测试分数分布)
data = np.random.randn(1000)
plt.hist(data, bins=30, density=True, alpha=0.7, color='steelblue', edgecolor='black')
# 绘制拟合的正态曲线
mu, sigma = np.mean(data), np.std(data)
x = np.linspace(min(data), max(data), 100)
y = (1/(sigma * np.sqrt(2*np.pi))) * np.exp(-(x-mu)**2/(2*sigma**2))
plt.plot(x, y, 'r-', linewidth=2, label='正态分布拟合')'直方图与正态分布')
plt.xlabel('数值')
plt.ylabel('概率密度')
plt.legend()
plt.show()
关键点:hist() 的 bins, density,可叠加理论分布曲线。
子图(Subplots)布局
场景:同时显示多个类型的图
fig, axes = plt.subplots(2, 2, figsize=(10, 8))
# 子图1:折线
axes[0,0].plot([1,2,3], [1,4,9])
axes[0,0].set_title('折线图')
# 子图2:柱状
axes[0,1].bar(['a','b','c'], [3,1,2])
axes[0,1].set_title('柱状图')
# 子图3:散点
axes[1,0].scatter([1,2,3], [6,4,2])
axes[1,0].set_title('散点图')
# 子图4:饼图
axes[1,1].pie([30,40,30], labels=['A','B','C'])
axes[1,1].set_title('饼图')
plt.tight_layout() # 自动调整间距
plt.show()
关键点:plt.subplots(nrows, ncols) 返回 fig, axes,通过 axes[row,col] 操作每个子图。
3D 曲面图(mplot3d)
场景:显示三维函数曲面(如 z = sin(sqrt(x^2+y^2)))
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
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='coolwarm', edgecolor='none')
fig.colorbar(surf)
ax.set_title('3D 曲面图')
plt.show()
关键点:projection='3d',plot_surface(),np.meshgrid()。
动态实时更新(动画)
场景:实时数据流可视化(如传感器读数)
import matplotlib.animation as animation
fig, ax = plt.subplots()
xdata, ydata = [], []
line, = ax.plot([], [], 'r-', animated=True)
def init():
ax.set_xlim(0, 2*np.pi)
ax.set_ylim(-1.5, 1.5)
return line,
def update(frame):
xdata.append(frame)
ydata.append(np.sin(frame))
line.set_data(xdata, ydata)
return line,
ani = animation.FuncAnimation(fig, update, frames=np.linspace(0, 2*np.pi, 128),
init_func=init, blit=True, interval=50)'实时正弦波')
plt.show()
关键点:animation.FuncAnimation,blit=True 提高性能。
甘特图(横道图)—— 常用于项目管理
场景:任务时间表
import pandas as pd
import matplotlib.dates as mdates
tasks = ['需求分析', '设计', '开发', '测试']
start_dates = ['2024-01-01', '2024-01-10', '2024-02-01', '2024-03-01']
end_dates = ['2024-01-10', '2024-02-01', '2024-03-01', '2024-03-15']
df = pd.DataFrame({'Task': tasks, 'Start': pd.to_datetime(start_dates), 'End': pd.to_datetime(end_dates)})
fig, ax = plt.subplots(figsize=(10, 4))
for i, row in df.iterrows():
ax.barh(row['Task'], (row['End'] - row['Start']).days, left=row['Start'].toordinal())
# 更简洁的方式:使用 ax.barh(..., left=mdates.date2num(...))'项目甘特图')
plt.show()
关键点:barh() + left 参数实现横道图。
热力图(Heatmap)
场景:相关性矩阵、二维数据强度展示
import matplotlib.pyplot as plt import numpy as np data = np.random.rand(10, 10) plt.imshow(data, cmap='hot', interpolation='nearest') plt.colorbar(label='强度')'热力图') plt.xticks(range(10)) plt.yticks(range(10)) plt.show()
关键点:imshow() + cmap,常用于矩阵可视化。
这些案例覆盖了什么?
| 案例 | 核心函数 | 常见应用场景 |
|---|---|---|
| 折线图 | plot() |
趋势、时间序列 |
| 柱状图 | bar() |
分类对比 |
| 饼图 | pie() |
占比分布 |
| 散点图 | scatter() |
相关性、聚类 |
| 直方图 | hist() |
分布统计 |
| 子图布局 | subplots() |
多图对比 |
| 3D 图 | plot_surface() |
空间曲面 |
| 动画 | FuncAnimation |
实时数据流 |
| 甘特图 | barh() |
项目计划 |
| 热力图 | imshow() |
相关性矩阵、密度 |
如果你需要更具体的案例(如金融K线图、地图数据叠加、极坐标图等),可以告诉我,我可以提供针对性的代码示例。