哪些Python案例展示了matplotlib用法?

wen python案例 3

本文目录导读:

哪些Python案例展示了matplotlib用法?

  1. 基础折线图与样式自定义
  2. 柱状图与条形图
  3. 饼图与突出显示
  4. 散点图与颜色映射
  5. 直方图与正态分布拟合
  6. 子图(Subplots)布局
  7. 3D 曲面图(mplot3d)
  8. 动态实时更新(动画)
  9. 甘特图(横道图)—— 常用于项目管理
  10. 热力图(Heatmap)
  11. 总结:这些案例覆盖了什么?

基础折线图与样式自定义

场景:展示简单的函数曲线(如温度变化、股票趋势)

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(颜色数组)、cmapalphas(点大小)、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.FuncAnimationblit=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线图、地图数据叠加、极坐标图等),可以告诉我,我可以提供针对性的代码示例。

抱歉,评论功能暂时关闭!