批量与单个导出线性与非线性的errors

 批量导出

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

# 解决中文问题
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 = scipy.io.loadmat(nonlinear_data_path)
    linear_data = scipy.io.loadmat(linear_data_path)
    
    # 提取u_shuzu数据
    nonlinear_u_shuzu = nonlinear_data[f'u_shuzu_{key_suffix}']
    linear_u_shuzu = linear_data[f'u_shuzu_{key_suffix}']
    
    # 计算差值
    difference = nonlinear_u_shuzu - linear_u_shuzu
    
    # 设置x和y坐标轴的值
    x = np.linspace(0.0, 600, nonlinear_u_shuzu.shape[1])
    y = np.linspace(0.0, 600, nonlinear_u_shuzu.shape[0])
    x, y = np.meshgrid(x, y)
    
    # 绘制散点图来显示差值
    sc = axs[index].scatter(x, y, c=difference.ravel(), cmap='seismic', vmin=-10, vmax=10)
    axs[index].set_title(f'差值 t={time_point}s', fontsize=14)
    axs[index].axis('off')  # 关闭坐标轴
    axs[index].set_aspect('equal', adjustable='box')  # 使子图长宽相等

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

# 使用所有子图轴对象创建颜色条,并将其放置在画布的底部
cbar = fig.colorbar(sc, ax=axs[:len(time_points)], orientation='horizontal', fraction=0.025, pad=1)
cbar.ax.tick_params(labelsize=12)
cbar.set_label('差值', fontsize=16)

plt.tight_layout()
plt.show()

单个导出

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

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

nonlinear_data_path = r'feixianxing/0.2miao.mat'  # 非线性数据的路径
linear_data_path = r'xianxing/0.2miao.mat'  # 线性数据的路径

nonlinear_data = scipy.io.loadmat(nonlinear_data_path)
linear_data = scipy.io.loadmat(linear_data_path)

# 步骤2: 提取u_shuzu_400数据
nonlinear_u_shuzu_400 = nonlinear_data['u_shuzu_200']
linear_u_shuzu_400 = linear_data['u_shuzu_200']
# 确保两个数据具有相同的形状
assert nonlinear_u_shuzu_400.shape == linear_u_shuzu_400.shape, "Data shapes are not equal."

# 步骤3: 计算差值
difference = nonlinear_u_shuzu_400 - linear_u_shuzu_400

# 步骤4: 处理和使用差值数据
# 例如,您可以将差值数据保存到CSV文件中
difference_df = pd.DataFrame(difference.reshape(-1, 1))
difference_df.to_csv('difference_u_shuzu_400.csv', header=False, index=False)

# 如果您想要查看差值数据的一部分,例如前5行
print(difference_df.head())

# plt.figure(figsize=(8,6))

x = np.linspace(0.0, 600, 101)
y = np.linspace(0.0, 600, 101)
x, y = np.meshgrid(x, y)

# plt.contourf(x, y, difference, cmap='RdBu_r', zorder=1)
# # plt.legend(loc="upper left")
# plt.xlim([0,600])
# plt.ylim([0,600])
fig, ax = plt.subplots()
scatter =ax.scatter(x, y, c=difference,cmap = ('seismic'),vmin=-1.5, vmax=1.5)
ax.set_xticks([])
ax.set_yticks([])
ax.set_title('chazhi t=0.2s', fontsize=22)
cbar = fig.colorbar(chazhi, orientation='vertical',  fraction=0.046, pad=0.04)
cbar.ax.tick_params(labelsize=12)
plt.show()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

scouttttt

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

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

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

打赏作者

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

抵扣说明:

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

余额充值