You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将多组初始条件下的系统稳定性曲线绘制在同一张图中?

将多组初始条件的系统曲线合并到同一图中

我需要绘制不同初始条件下系统结果的变化曲线,但当前每组曲线都单独显示在不同图像中,对比信息很不方便。我尝试调整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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 19:04:50