当前位置: 首页 > article >正文

读取csv里面的文件数据画曲线

在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import os
import matplotlib as mpl
# 可修改的配置参数
i = 6  # 文件索引,可以根据需求进行修改
# /home/featurize/work/1/邮件/实验图/1.csv
csv_file_path = r"/home/featurize/work/1/邮件/实验图/Fig/{}.csv".format(i)  # CSV 文件路径,i 将会被替换
save_path_combined = r"/home/featurize/work/1/邮件/实验图/Fig/{}_1_acc_loss.svg".format(i)  # 合并后的图像保存路径,文件名中的 2 会被 i 替换

save_dir = os.path.dirname(save_path_combined)  # 获取保存文件的文件夹路径
if not os.path.exists(save_dir):
    os.makedirs(save_dir)  # 创建文件夹

# 图形大小、分辨率等
figure_size = (10, 12)  # 图形大小,调整为适合上下排列的大小
dpi = 300  # 图像保存时的分辨率
alpha = 0.5  # 曲线透明度
line_style = '-'  # 曲线样式
line_width = 2  # 曲线宽度

# 数据关键字(可修改)
loss_keyword = 'loss'  # loss 数据的关键字
acc_keyword = 'acc'  # acc 数据的关键字

# 读取 CSV 文件,不指定列名
data = pd.read_csv(csv_file_path, header=None)

# 自动检测 CSV 文件中是否存在 loss 或 acc 关键字
loss_found = False
acc_found = False
loss_col_idx, acc_col_idx = None, None

# 遍历所有列,找出包含 loss 或 acc 数据的列
for col_idx in range(data.shape[1]):
    if data[col_idx].astype(str).str.contains(loss_keyword, case=False, na=False).any():
        loss_found = True
        loss_col_idx = col_idx
    if data[col_idx].astype(str).str.contains(acc_keyword, case=False, na=False).any():
        acc_found = True
        acc_col_idx = col_idx

# 选择并生成单独的图像的函数
def plot_data(config, data1_x_col, data1_y_col, data2_x_col, data2_y_col, interval=1):
    # 读取 CSV 文件,提取数据列
    data = pd.read_csv(csv_file_path, header=None)

    data1_x = data[data1_x_col].values  # 第一组数据的 x 值
    data1_y = data[data1_y_col].values  # 第一组数据的 y 值
    data2_x = data[data2_x_col].values  # 第二组数据的 x 值
    data2_y = data[data2_y_col].values  # 第二组数据的 y 值

    # 确保 X 值的最小值和最大值,生成均匀间隔的 X 值
    x_min = min(min(data1_x), min(data2_x))
    x_max = max(max(data1_x), max(data2_x))

    # 使用 interval (间隔大小) 来生成均匀的 X 值
    x_range = np.arange(x_min, x_max, interval)  # 使用 np.arange 来确保均匀间隔的点

    # 插值计算均匀 x 值对应的 y 值
    data1_y_interp = np.interp(x_range, data1_x, data1_y)
    data2_y_interp = np.interp(x_range, data2_x, data2_y)

    # 绘制数据曲线
    plt.plot(x_range, data1_y_interp, color=config["color_data1"], marker='o', linestyle=line_style,
             alpha=alpha, label=config["label_data1"], linewidth=line_width)
    plt.plot(x_range, data2_y_interp, color=config["color_data2"], marker='o', linestyle=line_style,
             alpha=alpha, label=config["label_data2"], linewidth=line_width)

    # 设置图表标题和标签
    plt.xlabel(config["xlabel"])
    plt.ylabel(config["ylabel"])

    # 设置横坐标为整数格式(如果需要)
    if config["x_ticks_integer"]:
        plt.gca().xaxis.set_major_formatter(plt.FuncFormatter(lambda x, _: f'{int(x)}'))

    # 显示图例
    if config["legend"]:
        plt.legend()

    # 显示网格
    if config["grid"]:
        plt.grid(True)

# 配置 loss 图像
config_loss = {
    "xlabel": 'Epochs',  # X轴标签
    "ylabel": 'Loss',  # Y轴标签
    "x_ticks_integer": True,  # 是否将横坐标显示为整数
    "legend": True,  # 是否显示图例
    "grid": True,  # 是否显示网格
    # "color_data1": 'red',  # 第一组数据曲线颜色
    # "color_data2": 'blue',  # 第二组数据曲线颜色

    

    # "label_data1": 'Loss function curve using BiLSTM+BiGRU+DCNN+Word normalization',  # 第一组数据标签
    # "label_data2": 'Loss function curve using BiLSTM+BiGRU+DCNN' , # 第二组数据标签

    #1. BiLSTM+BiGRU+DCNN+Word normalization (BBDWN)
    #1. BiLSTM+BiGRU+DCNN (BBD)

    #"label_data1": 'Loss function curve using BBD+WN',  # 第一组数据标签
    #"label_data2": 'Loss function curve using BBD' # 第二组数据标签

    #BiLSTM+BiGRU+DCNN+Word normalization + Weightted word normalization (BBDWNWWN)
    #BiLSTM+BiGRU+DCNN+Weightted word normalization (BBDWWN)
    #

     #第三张图片
    # "color_data1": 'red',  # 第一组数据曲线颜色
    # "color_data2": 'blue',  # 第二组数据曲线颜色
    #  "label_data2": 'Loss function curve using BBD',  # 第一组数据标签
    #  "label_data1": 'Loss function curve using BBD+WN'  # 第二组数据标签
    
    #第四张图片
    # "color_data1": 'red',  # 第一组数据曲线颜色
    # "color_data2": 'blue',  # 第二组数据曲线颜色
    # "label_data2": 'Loss function curve using BBD+WWN',  # 第一组数据标签
    # "label_data1": 'Loss function curve using BBD+ESE+WWN'  # 第二组数据标签
    
    #第五张图片
     # "color_data2": 'red',  # 第一组数据曲线颜色
     # "color_data1": 'blue',  # 第二组数据曲线颜色
     # "label_data1": 'Loss function curve using BBD+ESE',  # 第一组数据标签
     # "label_data2": 'Loss function curve using BBD+ESE+WN'  # 第二组数据标签
    
    #第六张图片
     "color_data2": 'red',  # 第一组数据曲线颜色
     "color_data1": 'blue',  # 第二组数据曲线颜色
     "label_data1": 'Loss function curve using BBD+WN',  # 第一组数据标签
     "label_data2": 'Loss function curve using BBD+WN+WWN'  # 第二组数据标签

    # "label_data1": 'Loss function curve using BiLSTM+BiGRU+DCNN+Emotion sequence encoding',  # 第一组数据标签
    # "label_data2": 'Loss function curve using BiLSTM+BiGRU+DCNN+Emotion sequence encoding+Word normalization'  # 第二组数据标签

    # "label_data2": 'Loss function curve using BiLSTM+DCNN',  # 第一组数据标签
    # "label_data1": 'Loss function curve using BiLSTM'  # 第二组数据标签

    # "label_data2": 'Loss function curve using BiLSTM+BiGRU+DCNN',  # 第一组数据标签
    # "label_data1": 'Loss function curve using BiLSTM+BiGRU+DCNN+Word normalization'  # 第二组数据标签

    # "label_data2": 'Loss function curve using BiLSTM+BiGRU+DCNN + Weightted word normalization',  # 第一组数据标签
    # "label_data1": 'Loss function curve using BiLSTM+BiGRU+DCNN+Word normalization+Weightted word normalization'  # 第二组数据标签
}

# 配置 acc 图像
config_acc = {
    "xlabel": 'Epochs',  # X轴标签
    "ylabel": 'Acc',  # Y轴标签
    "x_ticks_integer": True,  # 是否将横坐标显示为整数
    "legend": True,  # 是否显示图例
    "grid": True,  # 是否显示网格
    # "color_data1": 'blue',  # 第一组数据曲线颜色
    # "color_data2": 'red',  # 第二组数据曲线颜色
   
    # "color_data1": 'blue',  # 第一组数据曲线颜色
    # "color_data2": 'red',  # 第二组数据曲线颜色
    
    #第三张图片
    # "color_data2": 'red',  # 第一组数据曲线颜色
    # "color_data1": 'blue',  # 第二组数据曲线颜色
    #  "label_data1": 'Accuracy curve using BBD',  # 第一组数据标签
    #  "label_data2": 'Accuracy curve using BBD+WN'  # 第二组数据标签
    
    # #第四张图片
    # "color_data2": 'red',  # 第一组数据曲线颜色
    # "color_data1": 'blue',  # 第二组数据曲线颜色
    # "label_data1": 'Accuracy curve using BBD+WWN',  # 第一组数据标签
    # "label_data2": 'Accuracy curve using BBD+ESE+WWN'  # 第二组数据标签

    #第五张图片
     # "color_data2": 'red',  # 第一组数据曲线颜色
     # "color_data1": 'blue',  # 第二组数据曲线颜色
     # "label_data1": 'Accuracy curve using BBD+ESE',  # 第一组数据标签
     # "label_data2": 'Accuracy curve using BBD+ESE+WN'  # 第二组数据标签
    
     #第六张图片
     "color_data1": 'red',  # 第一组数据曲线颜色
     "color_data2": 'blue',  # 第二组数据曲线颜色
    "label_data2": 'Accuracy curve using BBD+WN',  # 第一组数据标签
    "label_data1": 'Accuracy curve using BBD+WN+WWN'  # 第二组数据标签

    # "label_data1": 'Loss function curve using BBBDWNWWN',  # 第一组数据标签
    # "label_data2": 'Loss function curve using BBBDWWN'  # 第二组数据标签

    # "label_data1": 'Accuracy curve using BiLSTM+BiGRU+DCNN+Word normalization',  # 第一组数据标签
    # "label_data2": 'Accuracy curve using BiLSTM+BiGRU+DCNN+Emotion sequence encoding+Word normalization'  # 第二组数据标签


    # "label_data1": 'Loss function curve using BiLSTM+BiGRU+DCNN+Emotion sequence encoding',  # 第一组数据标签
    # "label_data2": 'Loss function curve using BiLSTM+BiGRU+DCNN+Emotion sequence encoding+Weightted word normalization'  # 第二组数据标签

    # "label_data1": 'Loss function curve using BiLSTM+BiGRU+DCNN+Emotion sequence encoding',  # 第一组数据标签
    # "label_data2": 'Loss function curve using BiLSTM+BiGRU+DCNN+Emotion sequence encoding+Word normalization'  # 第二组数据标签

    # "label_data2": 'Loss function curve using BiLSTM+DCNN',  # 第一组数据标签
    # "label_data1": 'Loss function curve using BiLSTM'  # 第二组数据标签

    # "label_data1": 'Loss function curve using BiLSTM+BiGRU+DCNN',  # 第一组数据标签
    # "label_data2": 'Loss function curve using BiLSTM+BiGRU+DCNN+Word normalization'  # 第二组数据标签

    # "label_data1": 'Loss function curve using BiLSTM+BiGRU+DCNN + Weightted word normalization',  # 第一组数据标签
    # "label_data2": 'Loss function curve using BiLSTM+BiGRU+DCNN+Word normalization+Weightted word normalization'  # 第二组数据标签
}

# 创建一个包含两个子图的图形,按顺序上下排列
# 设置全局字体为罗曼字体 (Times New Roman),并设置字体大小为 12pt
#mpl.rcParams['font.family'] = 'serif'
#mpl.rcParams['font.serif'] = ['Times New Roman']  # 或者可以替换为其他罗曼字体
mpl.rcParams['font.size'] = 20  # 设置字体大小为 12pt

fig, (ax1, ax2) = plt.subplots(2, 1, figsize=figure_size, dpi=dpi)

# fig.patch.set_facecolor('white')
# ax1.set_facecolor('white')
# ax2.set_facecolor('white')

# 绘制 loss 图像到第一个子图
plt.sca(ax1)
if loss_found:
    plot_data(config_loss, loss_col_idx + 1, loss_col_idx + 2, loss_col_idx + 3, loss_col_idx + 4, interval=0.5)

# 绘制 acc 图像到第二个子图
plt.sca(ax2)
if acc_found:
    plot_data(config_acc, acc_col_idx + 1, acc_col_idx + 2, acc_col_idx + 3, acc_col_idx + 4, interval=0.5)
# fig.patch.set_facecolor('white')  # 设置图形的背景颜色为白色
# 调整布局,避免标签重叠
plt.tight_layout()
# plt.savefig('H:\邮件\实验图\confusion_matrices_hd.svg', format='svg', dpi=300)
# plt.savefig(save_path_combined, format='svg', dpi=dpi, bbox_inches='tight', pad_inches=0.1)
# fig.patch.set_facecolor('white')  # 设置图形的背景颜色为白色
# ax1.patch.set_facecolor('white')  # 设置第一个子图的背景颜色
# ax2.patch.set_facecolor('white')  # 设置第二个子图的背景颜色
plt.savefig(save_path_combined, format='svg', dpi=dpi, bbox_inches='tight', pad_inches=0.1)
# 展示合并后的图像
plt.show()

在这里插入图片描述


http://www.kler.cn/a/427986.html

相关文章:

  • 浅谈AI的发展对IT行业的影响
  • Git进阶之旅:.gitignore 文件
  • 5.3.2 软件设计原则
  • Attention--人工智能领域的核心技术
  • 使用langchain ollama gradio搭建一个本地基于deepseek r1的RAG问答系统
  • GitHub Actions定时任务配置完全指南:从Cron语法到实战示例
  • B4X编程语言:B4J控件的样式设置属性(Style/StyleClasses)
  • 利用R包QstFstComp包进行Qst-Fst分析
  • 处理海量数据的查重方法总结
  • 【WRF运行第一期(Ubuntu)】模型运行前准备
  • 高数极限与连续练习题(自用)
  • 网络渗透实验二(渗透课)
  • 新160个crackme - 109-Jony-crackme
  • ElementUI:el-tabs 切换之前判断是否满足条件
  • docker-3.docker权限问题
  • 开发一个AMT(automatic multicast tunnel)协议库 C++版本,Client,Server详细的设计
  • STM32F103单片机使用STM32CubeMX创建IAR串口工程
  • mac 安装python3和配置环境变量
  • 【Leetcode Top 100】146. LRU 缓存
  • Octo—— 基于80万个机器人轨迹的预训练数据集用于训练通用机器人,可在零次拍摄中解决各种任务
  • 网络资源模板--Android Studio 实现绿豆通讯录
  • 【springboot】 多数据源实现
  • 塑胶模具基本结构及塑胶成型原理
  • ubuntu 使用USB转TTL线连接树莓派4B
  • 【Android】ARouter源码解析
  • Python 信息科技赛课区一等奖教案(语音合成技术)