
数学建模制图学习手册工具Jupyter Lab Python 3.14核心库Matplotlib / NumPy / SciPy / Pandas / Seaborn / Plotly / SymPy本文章记录的是数学建模论文中用于产出图表的工具平台——Jupyter的基本使用方法而图表是数据类命题论文成品中的重要组成部分。目录环境与工具链代码结构模板Matplotlib 核心函数linspace 函数详解pyplot 快捷接口 vs 面向对象接口Seaborn 简介Plotly 交互式可视化库之间的协作关系完整学习规划练习题1. 环境与工具链已安装的库库版本用途Matplotlib3.11.0一切制图的基石静态图NumPy2.3.5数值计算引擎SciPy1.18.0科学计算优化、插值、积分、统计Pandas3.0.4数据处理与表格操作Seaborn0.13.2统计图表基于 Matplotlib 的高级封装Plotly6.8.0交互式图表、3D、动态可视化SymPy1.14.0符号计算、公式推导启动 Jupyterpython3-mjupyter lab# Jupyter Lab推荐现代界面python3-mjupyter notebook# Jupyter Notebook经典界面如果在终端中可用jupyter lab命令jupyter lab日常使用组合数据预处理 Pandas NumPy 数值计算 SciPy优化、积分、插值、统计 符号推导 SymPy公式化简、求导、解方程 制图静态 Matplotlib Seaborn 制图交互 Plotly 建模主场 Jupyter Notebook/Lab2. 代码结构模板一张标准 Matplotlib 图的代码结构记住这六步① 导入库 import matplotlib.pyplot as plt import numpy as np ② 准备数据 x np.linspace(0, 10, 200) y np.sin(x) ③ 创建画布 fig, ax plt.subplots(figsize(8, 4)) ④ 往图上画东西 ax.plot(x, y, labelsin(x), colorred, linewidth2) ⑤ 修饰 ax.set_title(标题, fontsize14) ax.set_xlabel(x) ax.set_ylabel(y) ax.legend() ax.grid(True, alpha0.3) ⑥ 显示/保存 plt.show() fig.savefig(output.png, dpi300, bbox_inchestight)这六步适用于 90% 的静态图表。3. Matplotlib 核心函数3.1ax.plot()— 折线图fig,axplt.subplots()ax.plot(x,y,label曲线名,color#2c7bb6,linewidth2,linestyle-)关键参数速查参数含义常用取值x, y数据坐标NumPy 数组color颜色red#2c7bb6C0调色板第1色linewidth/lw线宽123linestyle/ls线型-实线 /--虚线 /-.点划线 /:点线marker数据点标记os^.不标记markersize/ms标记大小468label图例标签任意字符串alpha透明度0全透到1不透3.2ax.scatter()— 散点图scax.scatter(x,y,ccolors,ssizes,cmapviridis,alpha0.7,edgecolorswhite)plt.colorbar(sc,axax,label颜色值)关键参数参数含义c颜色字符串或数值数组配cmaps点的大小可以是数组cmap颜色映射viridisplasmacoolwarmRdBuedgecolors边框颜色alpha透明度3.3ax.bar()— 柱状图barsax.bar(categories,values,color#2c7bb6,edgecolorblack,yerrerrors,capsize5)关键参数参数含义yerr误差线高度capsize误差线端横杠宽度width柱子宽度默认 0.8bottom柱子起始高度堆叠柱状图用3.4plt.subplots()— 子图布局fig,axesplt.subplots(2,2,figsize(10,8))# 2行2列axes[0,0].plot(x,y1)# 左上axes[0,1].scatter(x,y2)# 右上axes[1,0].bar(x,y3)# 左下axes[1,1].plot(x,y4)# 右下plt.tight_layout()# 自动调间距参数说明参数含义nrows, ncols行数、列数figsize(宽, 高)单位英寸sharexTrue子图共享 X 轴shareyTrue子图共享 Y 轴tight_layout()画完最后调用防标签重叠3.5 完整示例逐行注释# ① 导入库importmatplotlib.pyplotaspltimportnumpyasnp# ② 生成数据xnp.linspace(0,2*np.pi,100)# 从 0 到 2π100 个点y1np.sin(x)y2np.cos(x)# ③ 创建画布fig,axplt.subplots(figsize(8,4))# ④ 画图# ax.plot(x数据, y数据, label图例名, color颜色, linewidth线宽, linestyle线型)ax.plot(x,y1,labelsin(x),color#2c7bb6,linewidth2,linestyle-)ax.plot(x,y2,labelcos(x),color#d7191c,linewidth2,linestyle--)# ⑤ 修饰ax.set_title(正弦与余弦,fontsize14)# 标题ax.set_xlabel(x)# X轴标签ax.set_ylabel(y)# Y轴标签ax.legend()# 图例ax.grid(True,alpha0.3)# 半透明网格# ⑥ 显示plt.show()3.6 常用修饰指令速查fig,axplt.subplots()# 标题与轴标签ax.set_title(标题,fontsize14,fontweightbold)ax.set_xlabel(X轴标签,fontsize12)ax.set_ylabel(Y轴标签,fontsize12)# 轴范围与刻度ax.set_xlim(0,10)ax.set_ylim(-2,2)ax.set_xticks([0,2,4,6,8,10])ax.tick_params(labelsize10)# 网格ax.grid(True,linestyle--,alpha0.4,whichboth)# 图例ax.legend(locupper right,frameonTrue,fontsize10)# 文本标注ax.text(5,0,标注文字,hacenter,vacenter,fontsize12,colorred)# 保存图片fig.savefig(output.png,dpi300,bbox_inchestight,facecolorwhite)4. linspace 函数详解np.linspace(起点,终点,点数)参数含义起点从哪个值开始包含终点到哪个值结束包含点数均匀取多少个值示例np.linspace(0,10,5)→[0.2.55.7.510.]# 起 → → → → → → → → → 终# 100个等距的点linspacevsarangenp.arange(0,10,2)→[0,2,4,6,8]# 指定步长末点可能丢np.linspace(0,10,5)→[0.0,2.5,5.0,7.5,10.0]# 指定点数末点一定包含画函数图像时一律用linspace末点不丢点数越密曲线越光滑。一般 100-500 点足够。5. pyplot 快捷接口 vs 面向对象接口对比同一张图两种写法——效果完全一样快捷接口plt.figure(figsize(6,4))plt.plot(x,np.sin(x),r-,labelsin(x))plt.title(快捷接口)plt.xlabel(x)plt.ylabel(y)plt.legend()plt.grid(True,alpha0.3)plt.show()面向对象接口fig,axplt.subplots(figsize(6,4))ax.plot(x,np.sin(x),r-,labelsin(x))ax.set_title(面向对象接口)ax.set_xlabel(x)ax.set_ylabel(y)ax.legend()ax.grid(True,alpha0.3)plt.show()pyplot 快捷面向对象创建画布plt.figure()fig, ax plt.subplots()画线plt.plot()ax.plot()加标题plt.title()ax.set_title()图例plt.legend()ax.legend()多子图时的差距快捷接口容易搞混plt.figure(figsize(10,4))plt.subplot(1,2,1)# 切到左边 — 靠记位置plt.plot(x,np.sin(x),r-)plt.title(左)plt.subplot(1,2,2)# 切到右边 — 靠记位置plt.plot(x,np.cos(x),b-)plt.title(右)plt.show()面向对象清楚明了fig,axesplt.subplots(1,2,figsize(10,4))axes[0].plot(x,np.sin(x),r-)axes[0].set_title(左)axes[1].plot(x,np.cos(x),b-)axes[1].set_title(右)plt.show()为什么不用创建画布就能出图plt.plot(x,y)# 没创建画布也能画plt.show()plt.plot()内部自动做了检查画布是否存在 → 没有就自动创建检查坐标轴是否存在 → 没有就自动创建在坐标轴上画线所以快速验证可以省掉但只要涉及多子图、多画布必须用fig, ax plt.subplots()。6. Seaborn 简介Seaborn 是基于 Matplotlib 的统计可视化库相当于 Matplotlib 的自动美化插件。核心区别MatplotlibSeaborn角色底层引擎高层接口画图什么都能画代码多、默认丑一句代码出统计图默认好看调细节提供plt.title()plt.xlim()等基本不管细节使用规则Seaborn 画主干Matplotlib 收细节。importmatplotlib.pyplotaspltimportseabornassns# Seaborn 画图sns.boxplot(datadf,xday,ytip)# Matplotlib 调细节plt.title(小费分布)plt.xlabel(星期)plt.ylabel(金额)plt.savefig(boxplot.png,dpi150)plt.show()数学建模常用功能函数用途sns.heatmap(df.corr())相关系数矩阵热力图sns.boxplot()/sns.violinplot()多组数据分布对比sns.regplot()/sns.lmplot()线性回归 置信区间sns.histplot()sns.kdeplot()数据分布形态sns.pairplot()所有变量两两散点图矩阵7. Plotly 交互式可视化Plotly 生成的是交互式网页——可缩放、旋转、悬停查看数值不是死图片。基础交互散点图importplotly.expressaspx dfpx.data.iris()figpx.scatter(df,xsepal_width,ysepal_length,colorspecies,sizepetal_length,hover_data[petal_width],title鸢尾花数据集 — 可拖拽、缩放、悬停)fig.show()3D 曲面图importplotly.graph_objectsasgoimportnumpyasnp xnp.linspace(-5,5,100)ynp.linspace(-5,5,100)X,Ynp.meshgrid(x,y)Znp.sin(np.sqrt(X**2Y**2))figgo.Figure(data[go.Surface(zZ,xx,yy,colorscaleviridis)])fig.update_layout(title3D 涟漪曲面 — 鼠标拖拽旋转视角,scenedict(xaxis_titleX,yaxis_titleY,zaxis_titleZ))fig.show()导出为独立 HTMLfig.write_html(test_plotly.html)# 发给别人一个文件即可对方连 Python 都不需要装对比Matplotlib 静态图Plotly 交互图放大看细节重新设xlim/ylim重画滚轮直接缩放看点的精确值肉眼估计鼠标悬停弹窗3D 换角度手动设elev/azim鼠标直接拖放论文里导出 png/pdf导出 HTML 保持交互大数据量渲染快可能卡顿实际策略探索数据→ Plotly交互式分析论文出图→ Matplotlib/Seaborn导出高清静态图8. 库之间的协作关系Pandas数据清洗 ↓ NumPy SciPy计算 ↓ Matplotlib ← Seaborn静态图美化 ↓ 图出来后用 plt.xxx() 调细节 ↓ plt.show() 或 fig.savefig()总结Seaborn底层就是Matplotlib两者的坐标系是同一套plt.xxx()可以作用在 Seaborn 画出的图上Matplotlib能画 → Seaborn画得好看 → Plotly画得能动9. 完整学习规划第一阶段地基1-2周—— Matplotlib 核心 NumPy天数主题练习项目Day 1-2折线图、散点图、柱状图、子图布局多子图对比Day 3样式控制颜色、线型、标注、图例复现论文中的图Day 4-5等高线图contour/contourf、热力图imshowRosenbrock 函数Day 6三维图mplot3d3D 曲面Day 7动画FuncAnimation热传导模拟第二阶段数据思维3-4周—— Pandas Seaborn天数主题练习项目Day 8-9读写 csv/excel、数据清洗、分组空气数据Day 10-11hist/kde/box/violin分布对比Day 12regplot/lmplot、分类图散点 回归Day 13-14heatmap、clustermap相关性矩阵第三阶段交互5-6周—— Plotly天数主题Day 15-16Plotly Express 快速出图Day 17-183D 散点图、曲面图Day 19地理可视化scatter_mapboxDay 20-21Dash 仪表盘基础第四阶段数学建模专题制图7-9周专题制图重点优化问题可行域着色 等高线 最优解标注微分方程相图、箭头场 轨线插值与拟合拟合曲线对比 残差分布统计与概率QQ图、置信区间、假设检验网络/图论NetworkX 拓扑图时间序列趋势分解、预测区间第五阶段实战整合10-11周用 Jupyter Notebook 完成 2-3 个完整真题建议2023 国赛 A 题定日镜优化——偏微分方程 三维2020 美赛 C 题商品评论——文本 统计2021 国赛 B 题乙醇偶合——回归 交互10. 练习题习题 1带标注的曲线图画出y e − x / 3 ⋅ cos ( 2 x ) y e^{-x/3} \cdot \cos(2x)ye−x/3⋅cos(2x)在x ∈ [ 0 , 4 π ] x \in [0, 4\pi]x∈[0,4π]上的图像线宽 2颜色#e41a1c添加网格、标题、轴标签用ax.annotate()标注出第一个极值点位置习题 2双组散点对比用np.random.randn生成 100 个 μ0, σ1 和 100 个 μ3, σ1.5 的数据两种颜色区分图例标注点大小分别为 25 和 50透明度 0.6习题 3渐变柱状图年份201920202021202220232024销量(万)233528423855柱色随数值渐变cmap加色条 colorbar柱顶显示数值习题 4三子图布局1 行 3 列布局x ∈ [ 0.1 , 5 ] x \in [0.1, 5]x∈[0.1,5]左y 1 x 2 y_1 x^2y1x2红色实线中y 2 x y_2 \sqrt{x}y2x蓝色虚线右y 3 ln ( x ) y_3 \ln(x)y3ln(x)绿色点划线各有标题总标题三种初等函数最后的题目可以根据学习进度最后再进行尝试希望能有所帮助 。