三剑客——figure-subplot-axes

本文介绍了在Python的Matplotlib库中使用subplot和axes创建子图的方法。通过实例展示了如何利用这两种方式布局图表,并对比了它们的特点。subplot适用于网格布局,而axes则更灵活,可用于创建重叠和不规则布局。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前搞数据分析的时候会经常涉及到几个概念,如标题所示,有点小懵,今天简单搞一下……

import numpy as np
import matplotlib.pyplot as plt
#在fig中生成两个子图ax1和ax2
fig=plt.figure()
ax1=fig.add_subplot(221)  #两行两列的子图矩阵的第一个位置(从左到右从上到下数)
ax2=fig.add_subplot(224)  #两行两列的子图矩阵的第四个位置
ax1.set(xlim=[0.1,1.2],ylim=[1.4,6],title='NO.1-subplot',ylabel='y1-axis',xlabel='x1-axis')  #设置子图的属性,包括xy轴的范围和标题
ax2.set(xlim=[0.5,1.5],ylim=[100,300],title='NO.2-subplot',ylabel='y2-axis',xlabel='x2-axis')
#在fig1中生成四个子图ax3~ax6
fig1=plt.figure()
ax3=fig1.add_axes([0.2,0.2,1,1])  #添加轴域前两个参数为原点坐标(左下角坐标),后两个参数为xy轴的长度
ax4=fig1.add_axes([0.4,0.4,1,1])
ax5=fig1.add_axes([0.6,0.6,1,1])
ax6=fig1.add_axes([0.8,0.8,1,1])
#显示所有子图
plt.show()

看下效果:

第一个figure分成了两行两列四块,我们分别在第一块和第四块中进行画图;第二个figure包括四个轴域,通过设定坐标原点形成了层叠的效果。

figure就相当于一个画板,我们要作图的画纸就是subplot/axes,其中subplot意为子图,axes意为轴域,这两个概念差不多,后者相较于前者更加灵活,大家从图中也能看出,二者都是一个可以画图的轴域,也就是一个子图,即xy轴形成的区域。

<think>好的,我现在需要帮助用户了解Python在数学建模中的应用,用户提到了需要教程、案例相关库的支持。首先,我应该回顾用户之前的提问之前的回答,看看有没有可以借鉴的信息。用户之前询问过MATLAB的入门指南,现在转向Python,可能需要对比或者强调Python的优势。 用户提供的引用中提到了Matplotlib、NumPy、SciPyCVXPY等库,这些是数学建模中的核心工具。我需要将这些库整理出来,分别介绍它们的用途,并给出示例代码。同时,用户可能需要具体的应用案例,比如解方程、优化问题、数据可视化等,这些在之前的引用中都有涉及。 用户的需求可能包括以下几个方面: 1. 常用的Python数学建模库及其功能。 2. 具体的应用案例示例代码。 3. 推荐的学习资源教程。 4. 相关的问题扩展,帮助用户深入理解。 我需要确保回答结构清晰,分点列出,每个部分都包含必要的示例解释。例如,在介绍库时,可以提到NumPy用于数值计算,SciPy用于科学计算,Matplotlib用于可视化,CVXPY用于优化问题等。每个库下给出一个简单的代码示例,如解线性方程组、绘制3D等,这些代码需要来自用户提供的引用,或者常见的用例。 还要注意用户可能对如何开始学习Python数学建模有疑问,所以推荐书籍在线资源是必要的。比如《Python数学建模算法与应用》这本书,用户引用中已经提到,可以推荐作为教程。此外,Coursera官方文档也是好的资源。 最后,生成的相关问题需要帮助用户进一步探索,比如如何选择算法、处理大数据、验证模型等。这些问题应该与用户之前的提问相关,并引导他们深入。 需要检查是否所有引用的内容都被合理利用,比如引用1中的Matplotlib绘示例,引用2中的线性方程组求解,引用3中的优化问题。确保这些内容被整合到回答中,并正确标注引用来源。同时,回答要符合格式要求,使用中文,行内公式用$...$,独立公式用$$...$$,代码块正确标注语言类型。 总结步骤: 1. 介绍常用库功能,结合引用中的例。 2. 提供应用案例,展示不同库的协作。 3. 推荐学习资源,包括书籍在线课程。 4. 生成相关问题,帮助用户深入。 需要确保语言自然,结构清晰,不使用Markdown,但用户提供的格式要求中有示例结构,需要按照用户指定的格式来组织内容,比如分章节、代码块、问题列表等。同时,注意引用标注的正确位置,比如在提到解线性方程组时标注[^2],提到优化问题时标注[^3]。</think># Python数学建模综合指南 ## 一、核心工具库与功能 ### 1. 数值计算三剑客 - **NumPy**:实现$n$维数组运算,支持矩阵操作与广播机制 ```python import numpy as np A = np.array([[4,2,-1], [3,-1,2], [11,3,0]]) # 创建系数矩阵[^2] b = np.array([2,10,8]) x = np.linalg.solve(A, b) # 解线性方程组 ``` - **SciPy**:提供科学计算高级接口 ```python from scipy.optimize import minimize result = minimize(lambda x: (x[0]-3)**2 + (x[1]-1)**2, [0,0]) ``` - **SymPy**:符号计算工具 ```python from sympy import symbols, solve x, y = symbols('x y') sol = solve([x + y - 5, 2*x - y - 4], [x, y]) # 解符号方程组 ``` ### 2. 可视化利器 - **Matplotlib**:创建专业级表 ```python import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D fig = plt.figure() ax = fig.add_subplot(111, projection='3d') # 创建3D坐标系[^1] ax.plot_surface(X, Y, Z, cmap='viridis') plt.savefig('3d_plot.png', dpi=300) ``` ### 3. 专业建模工具 - **CVXPY**:凸优化建模 ```python import cvxpy as cp x = cp.Variable(2, pos=True) # 定义决策变量[^3] obj = cp.Maximize(c @ x) # 目标函数 cons = [A @ x <= b] # 约束条件 prob = cp.Problem(obj, cons) prob.solve(solver='GLPK_MI') # 调用求解器 ``` - **NetworkX**:论与网络分析 ```python import networkx as nx G = nx.DiGraph() G.add_edges_from([(1,2), (2,3), (3,1)]) nx.draw(G, with_labels=True) ``` ## 二、典型应用案例 ### 1. 方程求解系统 - **线性方程组**:使用`np.linalg.solve`求解$Ax=b$ - **非线性方程**:使用`scipy.optimize.root`求解 ```python from scipy.optimize import root def equations(p): x, y = p return (x**2 + y**2 - 25, x*y - 12) sol = root(equations, [3,4]) # 求解非线性方程组 ``` ### 2. 优化问题建模 - **线性规划**:使用`scipy.optimize.linprog` - **整数规划**:使用`cvxpy`配合GLPK_MI求解器[^3] ```python # 运输问题建模示例 cost = np.array([[4,6,8], [7,5,3]]) supply = [100, 150] demand = [80, 120, 50] x = cp.Variable(cost.shape, integer=True) obj = cp.Minimize(cp.sum(cp.multiply(cost, x))) constraints = [ cp.sum(x, axis=1) <= supply, cp.sum(x, axis=0) >= demand, x >= 0 ] ``` ### 3. 动态系统仿真 - **微分方程求解**:使用`scipy.integrate.solve_ivp` ```python def lotka_volterra(t, z, a, b, c, d): x, y = z return [a*x - b*x*y, -c*y + d*x*y] sol = solve_ivp(lotka_volterra, [0,15], [10,5], args=(0.4,0.02,0.3,0.01)) ``` ## 三、学习资源推荐 1. **权威教材**:《Python数学建模算法与应用》(附配套习题解答[^2][^3]) 2. **在线课程**: - Coursera《应用数据科学:Python建模》 - edX《计算思维与数据科学导论》 3. **官方文档**: - NumPy官方教程:https://numpy.org/doc/stable/user/quickstart.html - Matplotlib Gallery:https://matplotlib.org/stable/gallery/index.html ## 四、进阶技巧 1. **性能优化**: ```python # 使用Numba加速计算 from numba import jit @jit(nopython=True) def monte_carlo_pi(n): count = 0 for _ in range(n): x = np.random.random() y = np.random.random() if x**2 + y**2 < 1: count +=1 return 4*count/n ``` 2. **数据交互**: ```python # 与MATLAB数据交互 import scipy.io mat_data = scipy.io.loadmat('data.mat') scipy.io.savemat('output.mat', {'results': solution}) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

beyond_LH

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值