批量导出线性与非线性截面线对比

import numpy as np
import imageio
import os
import pandas as pd
import scipy.io
from matplotlib import pyplot as plt
from scipy.io import loadmat


# 解决中文问题
plt.rcParams['font.sans-serif'] = ['SimHei']
# 解决负号显示问题
plt.rcParams['axes.unicode_minus'] = False

# 定义时间点列表
time_points = ['0.2', '0.3', '0.4', '0.5', '0.6', '0.7', '0.8', '0.9', '1.0', '1.1', '1.2']

# 根据时间点数量计算子图布局的行数和列数
ncols = 3
nrows = (len(time_points) + ncols - 1) // ncols

# 准备画布
fig, axs = plt.subplots(nrows=nrows, ncols=ncols, figsize=(18, 6 * nrows))
axs = axs.flatten()  # 将多维数组扁平化以便循环

for index, time_point in enumerate(time_points):
    key_suffix = str(int(float(time_point) * 1000))
    nonlinear_data_path = f'feixianxing/{time_point}miao.mat'
    linear_data_path = f'xianxing/{time_point}miao.mat'
    
    # 加载.mat文件
    nonlinear_data = loadmat(nonlinear_data_path)
    linear_data = loadmat(linear_data_path)
    
    # 提取u的值
    nonlinear_u = nonlinear_data[f'u_shuzu_{key_suffix}']
    linear_u = linear_data[f'u_shuzu_{key_suffix}']
    
    # 定义y的范围
    y_range = np.linspace(0.0, 600, nonlinear_u.shape[0])

    # 假设x=300对应的索引,这里根据您的网格决定
    x_index = 50  # 假定中间值为x=300的位置

    # 提取在x=300时的u值
    nonlinear_u_at_x_300 = nonlinear_u[:, x_index]
    linear_u_at_x_300 = linear_u[:, x_index]
    
    # 在当前子图上绘制非线性和线性模型的y-u曲线
    axs[index].plot(y_range, nonlinear_u_at_x_300, label='非线性模型', linestyle='-')
    axs[index].plot(y_range, linear_u_at_x_300, label='线性模型', linestyle='--')
    
    axs[index].set_title(f't={time_point}s', fontsize=14)
    axs[index].set_xlabel('Y')
    axs[index].set_ylabel('U')
    axs[index].legend()

# 隐藏多余的子图
for i in range(len(time_points), len(axs)):
    axs[i].axis('off')

plt.tight_layout()
plt.show()

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

scouttttt

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

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

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

打赏作者

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

抵扣说明:

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

余额充值