如何将多组初始条件下的系统稳定性曲线绘制在同一张图中?
将多组初始条件的系统曲线合并到同一图中
我需要绘制不同初始条件下系统结果的变化曲线,但当前每组曲线都单独显示在不同图像中,对比信息很不方便。我尝试调整plt.figure()的位置,也考虑过用矩阵存储数据后绘图,但不确定正确的实现方法。我的代码如下:
import numpy as np from numpy.linalg import eig import matplotlib.pyplot as plt t_start, t_end, num_points = 0, 10, 100 dt = (t_end - t_start) / (num_points - 1) x_system_values = np.zeros(num_points) y_system_values = np.zeros(num_points) a = float(input("Enter the coefficient ’a’: ")) b = float(input("Enter the coefficient ’b’: ")) c = float(input("Enter the coefficient ’c’: ")) d = float(input("Enter the coefficient ’d’: ")) for m in range(0,2): for n in range(0,2): x_system, y_system = m, n for i in range(num_points): dxdt_system = a * x_system + b * y_system dydt_system = c * x_system + d * y_system x_system += dxdt_system * dt y_system += dydt_system * dt x_system_values[i] = x_system y_system_values[i] = y_system plt.figure() plt.plot(x_system_values, y_system_values) plt.xlabel("X") plt.ylabel("Y") plt.title("Stability") plt.legend() plt.show()
修改后的代码(实现同图多曲线)
import numpy as np from numpy.linalg import eig import matplotlib.pyplot as plt t_start, t_end, num_points = 0, 10, 100 dt = (t_end - t_start) / (num_points - 1) a = float(input("输入系数a: ")) b = float(input("输入系数b: ")) c = float(input("输入系数c: ")) d = float(input("输入系数d: ")) # 只创建一个画布,所有曲线都画在这里 plt.figure() for m in range(0,2): for n in range(0,2): x_system, y_system = m, n # 每次循环初始化独立的数组,避免数据覆盖 x_system_values = np.zeros(num_points) y_system_values = np.zeros(num_points) for i in range(num_points): dxdt_system = a * x_system + b * y_system dydt_system = c * x_system + d * y_system x_system += dxdt_system * dt y_system += dydt_system * dt x_system_values[i] = x_system y_system_values[i] = y_system # 给每条曲线添加初始条件标签,方便图例区分 plt.plot(x_system_values, y_system_values, label=f"初始条件 ({m}, {n})") # 统一设置图表属性,放在循环外避免重复操作 plt.xlabel("X") plt.ylabel("Y") plt.title("不同初始条件下的系统稳定性曲线") plt.legend() # 显示所有曲线的标签 plt.show()
关键修改点说明
- 单画布创建:将
plt.figure()移到所有循环之前,确保所有曲线绘制在同一画布上 - 避免数据覆盖:把数组初始化放到内层循环中,每个初始条件对应独立的数值数组,防止旧数据被覆盖
- 图例标签添加:给
plt.plot()增加label参数,标注每条曲线对应的初始条件,让图例清晰区分不同曲线 - 统一图表设置:将坐标轴标签、标题、图例调用移到循环结束后,减少重复操作,提升代码效率
内容的提问来源于stack exchange,提问作者Alexandru Chirvasa
相关产品推荐
相关产品推荐

