--- tid: 32tuwi title: Lab 2.2 高效学习Matplotlib绘图实验 --- # Lab 2.2 高效学习Matplotlib绘图实验 (date: 2025-11-24) 需改写 通过这个90分钟的实验,你可以快速掌握Matplotlib的核心绘图功能。Matplotlib是Python最流行的数据可视化库,用于创建各种静态、动态和交互式图表。 在本实验中,你会需要先阅读和运行基础示例,然后按 [step] 要求修改代码完成实验。 ## 实验环境准备 ```python # 安装matplotlib(如果尚未安装) # pip install matplotlib import matplotlib.pyplot as plt import numpy as np print("Matplotlib版本:", plt.__version__) ``` ## 第1部分:基础绘图与样式定制 ### 创建简单线图 [step 1] 要求: 1. 创建x从0到4π,包含100个点的数组 2. 绘制sin(x)和cos(x)的曲线,sin用红色实线,cos用蓝色虚线 3. 添加标题"三角函数曲线",x轴标签"x",y轴标签"y" 4. 添加图例,显示'sin(x)'和'cos(x)' 5. 设置网格线 ```python # 基础绘图示例 x = np.linspace(0, 2*np.pi, 50) y_sin = np.sin(x) y_cos = np.cos(x) plt.figure(figsize=(10, 6)) plt.plot(x, y_sin, label='sin(x)') plt.plot(x, y_cos, label='cos(x)') plt.title('基础三角函数图') plt.xlabel('x') plt.ylabel('y') plt.legend() plt.grid(True) plt.show() ``` ### 多子图布局 [step 2] 要求: 1. 创建2×2的子图布局 2. 左上:绘制sin(x)的散点图,点大小为20,颜色为红色 3. 右上:绘制cos(x)的柱状图(使用bar) 4. 左下:绘制tan(x),注意处理无穷大值 5. 右下:绘制sin(x) + cos(x)的面积图 6. 为每个子图添加标题 ```python # 多子图示例 x = np.linspace(0, 2*np.pi, 20) fig, axes = plt.subplots(2, 2, figsize=(12, 8)) # 子图1:线图 axes[0, 0].plot(x, np.sin(x)) axes[0, 0].set_title('正弦函数') plt.tight_layout() plt.show() ``` ## 第2部分:高级图表与数据可视化 ### 多种图表类型 [step 3] 要求: 1. 创建包含3个子图的画布 2. 左图:绘制随机数据的散点图,点大小和颜色随数据变化 3. 中图:绘制3组随机数据的箱线图,添加均值标记 4. 右图:绘制随机数据的直方图,设置透明度为0.7,添加密度曲线 ```python # 多种图表类型示例 np.random.seed(42) data1 = np.random.normal(0, 1, 100) data2 = np.random.normal(1, 1.5, 100) plt.figure(figsize=(15, 5)) # 散点图示例 plt.subplot(1, 3, 1) plt.scatter(data1, data2) plt.title('散点图') plt.tight_layout() plt.show() ``` ### 热力图与颜色映射 [step 4] 要求: 1. 创建10×10的随机矩阵,数值范围0-1 2. 绘制热力图,使用'viridis'颜色映射 3. 添加颜色条,设置标签"数值强度" 4. 在热力图上显示数值文本(保留1位小数) 5. 设置x轴和y轴标签为1-10 ```python # 热力图示例 data = np.random.rand(5, 5) plt.figure(figsize=(8, 6)) plt.imshow(data, cmap='hot') plt.colorbar() plt.title('热力图示例') plt.show() ``` ## 第3部分:实战应用-数据故事讲述 ### 综合数据可视化项目 [step 5] 要求:分析模拟销售数据并创建完整的仪表板 1. **数据准备**:生成12个月的模拟销售数据,包含产品A、B、C的销售额 2. **创建2×2的仪表板**: - 左上:月度总销售额趋势线图 - 右上:各产品销售额堆叠面积图 - 左下:产品销售额占比饼图 - 右下:月度增长率柱状图 3. **样式要求**: - 使用seaborn风格 - 统一颜色主题 - 添加总标题"年度销售分析仪表板" - 调整间距使布局美观 ```python # 数据准备 months = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'] product_a = np.random.randint(1000, 5000, 12) product_b = np.random.randint(800, 4000, 12) product_c = np.random.randint(1200, 6000, 12) # 基础图表示例 plt.style.use('seaborn') fig, ax = plt.subplots(figsize=(10, 6)) x_pos = np.arange(len(months)) ax.bar(x_pos - 0.2, product_a, 0.2, label='产品A') ax.bar(x_pos, product_b, 0.2, label='产品B') ax.bar(x_pos + 0.2, product_c, 0.2, label='产品C') ax.set_title('月度产品销售对比') ax.set_xticks(x_pos) ax.set_xticklabels(months) ax.legend() plt.show() ``` ### 高级定制与输出 [step 6] 要求: 1. 优化前面的销售仪表板,添加以下高级功能: - 在趋势图中标记最高和最低点 - 在饼图中突出显示占比最大的产品 - 在增长率图中用不同颜色区分正负增长 - 添加自定义注释和箭头指向关键数据点 2. 保存图表为高质量PNG文件(300 dpi) 3. 在analysis.md中分析哪个图表最能有效传达信息,为什么? ```python # 图表保存示例 plt.figure(figsize=(10, 6)) plt.plot([1, 2, 3, 4], [1, 4, 2, 3]) plt.savefig('my_plot.png', dpi=300, bbox_inches='tight') plt.show() ``` ## 实验总结 通过这个实验,你将掌握: - ✅ Matplotlib基础绘图和样式定制 - ✅ 多子图布局和复杂图表创建 - ✅ 数据可视化最佳实践 - ✅ 图表导出和高级定制技巧 在analysis.md中回答: 1. 多子图布局中,subplot()和subplots()的主要区别是什么? 2. 在数据可视化中,如何选择合适的图表类型来传达信息? 3. 高质量的科学图表应该具备哪些特征?