任务1- 读取.txt文件画折线图(曲线图)

任务2- 将.txt文件转换成.xls(excel)文件

任务3- 将.xls(excel)文件转换成.txt文件

任务4- 读取.txt文件画折线图(曲线图)

任务5- xml格式的数据集标签文件转.txt文件

任务6- 读取两个.txt文件画折线图(曲线图)

最近在做目标检测的任务,但是由于自己训练的损失函数不是自己想要的,但是自己的程序在训练的时候每个EpochEpochEpoch都会生成一个模型的损失数值,所以想根据这些数值自己画图。

任务1:根据txttxttxt文件内的数值,生成损失曲线。

txttxttxt文件内的数据样例如下图所示:

因为我的模型训练了150次,所以这样的数据有150个,且只有一列。直接在代码里详细叙述:

#导入必须的包
import matplotlib.pyplot as plt
import numpy as np
#-----------  打开txt文件   ----------
file = open('YOLOV4.txt')
#-----------  逐行读取文件内的数据  ------------
data = file.readlines()
#-----------  根据自己的需要查看data的内容  ---------
#print(data)
'''
txt文件的数值为y轴的数据
所以x要根据y的个数有序生成
'''
#------ x轴数据有序生成150个(根据自己的横坐标范围自己修改范围)  ----
x = np.arange(0,150)
#----------  新建一个空的列表,用于存储上一步逐行读取的data  ------------
y = []
#---------- 用循环的方式添加进列表  -----------
for num in data:#------split用于将每一行数据用逗号分割成多个对象-----#------取分割后的第0列,转换成float格式后添加到列表中-------y.append(float(num.split(',')[0]))
#---------------    输出图    ----------------------
#---------   可以理解为在图上加载x和y的数据   label为关于x和y曲线的标签------------
pic = plt.plot(x,y,label='Yolov4')
#---------   x轴的小标题   -------------
plt.xlabel('Epoch')
#---------   y轴的小标题   -------------
plt.ylabel('Loss')
#---------   整个图的标题  ----------
plt.title('yolov4-loss')
plt.legend()
plt.show()

代码关于画图的每个细节写的很详细,下面生成的折线图。

任务2- 将.txt文件转换成.xls(excel)文件

需要的同学直接复制代码,代码中注释了你需要修改的地方。

import xlwt
def txt_xls(filename, xlsname):try:f = open(filename, 'r', encoding='utf-8')xls = xlwt.Workbook()sheet = xls.add_sheet('sheet1', cell_overwrite_ok=True)x = 0while True:# 按行循环,读取文本文件line = f.readline()if not line:breakfor i in range(len(line.split('\t'))):item = line.split('\t')[i]sheet.write(x, i, item)x += 1f.close()# 保存xls文件xls.save(xlsname)  except:raise
'''
下面的地址中就是自己根据自己的需要修改的地方
为什么看上去没有路径呢?因为我是把txt文件和运行的此程序放在了同一个文件夹中
所以生成的.xls文件也在同级文件下,也就是他们在同一个文件夹中
如果你没放在一起,建议使用E://Path//...
'''
if __name__ == "__main__":#----------   需要转化的.txt文件   -----------filename = "YOLOV4.txt"  #----------   转换后的.xls文件名   -----------xlsname = "YOLOV4.xls"  # 保存及命名txt_xls(filename, xlsname)

任务3- 将.xls(excel)文件转换成.txt文件

将.xls.xls.xls文件转换成.txt.txt.txt文件。

python
import pandas as pd
#----------   如果你的.xls文件开了多个窗口文件(sheet1,sheet2,sheet3....)使用下面的代码    -----------
#df = pd.read_excel('YOLOV4.xls', sheet_name='Sheet1',header=None)
#----------   如果你的.xls文件没有开多个窗口(没有sheet1,sheet2,sheet3....)试用下面的代码
data = pd.read_excel('YOLOV4.xls', sheet_name='Sheet1',header=None)
print('正在读取将.xls文件内容')
#----------  写入txt文件,seq表示逗号分隔  --------------
data.to_csv('YOLOV4.txt', header=None, sep=',', index=False)
print('.xls文件转换成.txt文件成功')

任务4- 读取.txt文件画折线图(曲线图)

该任务算是任务一的进阶版,通过文件数据的转换,我的.txt.txt.txt文件的内容不再是一列,而是两列,第一列为序号,第二列为数值,基于此种情况,读取.txt.txt.txt文件,将其以折线图(曲线图)表示出来。
下图是我现在.txt.txt.txt数据的图例。

可以发现和任务一数据唯一不同就是多了一列的序列号,下面的是基于任务一改进的,就是改了几行,修改后的内容以注释的形式保存。话不多说直接代码中详细介绍:

#导入必须的包
import matplotlib.pyplot as plt
import numpy as np
#-----------  打开txt文件   ----------
file = open('file2.txt')
#-----------  逐行读取文件内的数据  ------------
data = file.readlines()
#-----------  根据自己的需要查看data的内容  ---------
#print(data)
'''
txt文件的数值为y轴的数据
所以x要根据y的个数有序生成
'''
#------ x轴数据有序生成150个(根据自己的横坐标范围自己修改范围)  ----
#x = np.arange(0,150)
#----------  新建一个空的列表,用于存储上一步逐行读取的data  ------------
x = []
y = []
#---------- 用循环的方式添加进列表  -----------
for num in data:#------split用于将每一行数据用逗号分割成多个对象-----#------x读取data数据的第一列(也就是序列号)x.append(float(num.split(',')[0]))#------取分割后的第0列,转换成float格式后添加到列表中-------#------y读取data数据的第二列(也就是数值)y.append(float(num.split(',')[1]))
#---------------    输出图    ----------------------
#---------   可以理解为在图上加载x和y的数据   label为关于x和y曲线的标签------------
pic = plt.plot(x,y,label='Yolov4')
#---------   x轴的小标题   -------------
plt.xlabel('Epoch')
#---------   y轴的小标题   -------------
plt.ylabel('Loss')
#---------   整个图的标题  ----------
plt.title('yolov4-loss')
plt.legend()
plt.show()

下面是得到的折线图(曲线图),和任务一得到的一模一样。

任务5- xml格式的数据集标签文件转.txt文件

在做目标检测任务时,我们手工打的标签往往都是.xml的文件,但是对于很多的网络,标签文件都需要.txt的文件,所以需要将.xml文件转换成模型需要的.txt文件,直接下面的代码可以转换:

#-------------------------------  successful  ----------------------------------
import os
import xml.etree.ElementTree as ET
from decimal import Decimal
#-------------------------     xml文件夹路径   ----------------------------
dirpath = 'E:\\pycharm\\py_shiyancode\\LYD-Champion-Function\\xml_origan'
#----------------------   转换后的txt文件夹路径   ----------------------
newdir = 'E:\\pycharm\\py_shiyancode\\LYD-Champion-Function\\txt' if not os.path.exists(newdir):os.makedirs(newdir)
for fp in os.listdir(dirpath):root = ET.parse(os.path.join(dirpath, fp)).getroot()xmin, ymin, xmax, ymax = 0, 0, 0, 0sz = root.find('size')width = float(sz[0].text)height = float(sz[1].text)filename = root.find('filename').textprint(fp)with open(os.path.join(newdir, fp.split('.')[0] + '.txt'), 'a+') as f:for child in root.findall('object'):  # 找到图片中的所有框sub = child.find('bndbox')  # 找到框的标注值并进行读取sub_label = child.find('name')xmin = float(sub[0].text)ymin = float(sub[1].text)xmax = float(sub[2].text)ymax = float(sub[3].text)try:  # 转换成yolov的标签格式,需要归一化到(0-1)的范围内x_center = Decimal(str(round(float((xmin + xmax) / (2 * width)), 6))).quantize(Decimal('0.000000'))y_center = Decimal(str(round(float((ymin + ymax) / (2 * height)), 6))).quantize(Decimal('0.000000'))w = Decimal(str(round(float((xmax - xmin) / width), 6))).quantize(Decimal('0.000000'))h = Decimal(str(round(float((ymax - ymin) / height), 6))).quantize(Decimal('0.000000'))print(str(x_center) + ' ' + str(y_center) + ' ' + str(w) + ' ' + str(h))# 读取需要的标签if sub_label.text == 'armor':f.write(' '.join([str(0), str(x_center), str(y_center), str(w), str(h) + '\n']))except ZeroDivisionError:print(filename, '的 width有问题')

任务6- 读取两个.txt文件画折线图(曲线图)

由于技术有限,只能使用最笨的方式读取每个文本的数据,然后再逐个遍历文本中的内容,将其添加进入列表内,然后画图,方法不是最优的,但是结果没问题。由于我没有之前的损失函数的文件了,所以自己手动添加进入文件几个数,作为教程。
这里需要注意:

  • 如果你的txttxttxt文本数据内只有一列,且这一列就是你要绘制图的yyy数值,则只需要将以下代码中的y1y1y1直接读取第000列就可以了,y2y2y2也同理,读取第000列(1默认为第2例)。至于xxx,你只需要根据y的个数生成1−−len(y1)1--len(y1)1−−len(y1)的数就可以画图了。(下面就是txttxttxt文本数据内的内容,仅作为参考)
  • 保持y1y1y1的个数与y2y2y2的个数一致,不然会超出xxx坐标的范围

import matplotlib.pyplot as pltif __name__== '__main__':# -----------  打开txt文件(路径一定要修改成自己的路径)   ----------file1 = open('./dataloader_experience/1.txt')file2 = open('./dataloader_experience/2.txt')# -----------  逐行读取文件内的数据  ------------data1 = file1.readlines()data2 = file2.readlines()# -----------  根据自己的需要查看data的内容  ---------# print(data)'''txt文件的数值为y轴的数据所以x要根据y的个数有序生成'''# ------ x轴数据有序生成150个(根据自己的横坐标范围自己修改范围)  ----# x = np.arange(0,150)# ----------  新建一个空的列表,用于存储上一步逐行读取的data  ------------x1 = []y1 = []y2 = []# ---------- 用循环的方式添加进列表  -----------for num1 in data1:# ------split用于将每一行数据用逗号分割成多个对象-----# ------x读取data数据的第一列(也就是序列号)#-------建议以float类型添加,因为得到的损失值,一般都为小数x1.append(float(num1.split(',')[0]))# ------取分割后的第0列,转换成float格式后添加到列表中-------# ------y读取data数据的第二列(也就是数值)y1.append(float(num1.split(',')[1]))for num2 in data2:y2.append(float(num2.split(',')[1]))# ---------------    输出图    ----------------------# ---------   可以理解为在图上加载x和y的数据   label为关于x和y曲线的标签------------#    根据需求变换线的格式和颜色plt.plot(x1, y1,label= 'yolov4_loss2')plt.plot(x1, y2, color='red', linestyle='--',label = 'yolov4_loss1')# ---------   x轴的小标题   -------------plt.xlabel('Epoch')# ---------   y轴的小标题   -------------plt.ylabel('Loss')# ---------   整个图的标题  ----------plt.title('yolov4-loss')plt.legend()plt.show()

结果图如下

总结:

  • 如果你的数据是.txt.txt.txt文件,数据只有一列,那么任务一就可以解决你的问题
  • 如果你有.xls.xls.xls格式的文件,你可以通过任务三将其转换成.txt.txt.txt文件,然后通过任务一或者四解决你的问题
  • 如果你将.txt.txt.txt文件转换成.xls.xls.xls文件,任务二可以解决你的问题
  • 如果你将.xml.xml.xml文件转换成.txt.txt.txt文件,任务五可以解决你的问题
    如果对您有用,不妨点个赞吧

Python读取txt文件画Loss曲线图---txt文件转xls文件---xls文件转txt文件--xml文件转txt文件相关推荐

  1. python绘制蝴蝶_python画蝴蝶曲线图的实例

    蝴蝶曲线是由Temple H·Fay发现的可用极坐标函数表示的蝴蝶曲线. 由于此曲线优美, 因此就想把它作为博客favicon.ico,这里我使用pytho matplotlib.pyplot包来绘制 ...

  2. python读取csv数据画直方图_用csv文件作为inpu在python中绘制直方图

    我有一个csv文件,其中包含两列,第一列是水果名,第二列是计数,我需要绘制直方图使用这个csv作为输入到下面的代码.我怎样才能做到.我只需要显示前20个条目,其中水果名称将是x轴,计数将是y轴从整个c ...

  3. python读取csv数据画直方图_用python绘制直方图

    其实,学习数据分析,excel可以完成绝大多数的工作,只是课程中@tiger是用python做的,而且最近自己也在学习编程,所以就挑战一下新东西,学学用python做作业,感谢@余欣 的教程,让我一个 ...

  4. python读取csv数据画直方图_Python数据可视化(Pygal、svg、csv、Bar、Line)

    一.pygal(图表类型Bar) 将使用Python可视化包Pygal来生成可缩放的矢量图形文件 pygal官方文档:[www.pygal.org/en/stable/](http://www.pyg ...

  5. python读取csv数据画直方图_python 中直方图绘制

    一.直方图绘制参数详解 1.plt.hist(x, bins=10, range=None, normed=False, weights=None, cumulative=False, bottom= ...

  6. 使用python读取excel进行处理,并将结果存储在新的excel

    使用python读取excel进行处理,并将结果存储在新的excel 生活所需,领导安排整理出一些文件,整了一个小时才几个快累趴了,手也快抽筋了.网上都说python可以很简单的处理办公文件,想让py ...

  7. python读取数据画三维图_Python实现读取txt文件并画三维图

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  8. python删除重复值所在的行数_使用python读取txt文件的内容,并删除重复的行数方法...

    注意,本文代码是使用在txt文档上,同时txt文档中的内容每一行代表的是图片的名字. #coding:utf-8 import shutil readDir = "原文件绝对路经" ...

  9. python读取txt文件并画图

    1,使用python读取txt文件 已知txt文件内容如下: 0 01 12 43 94 165 256 36 请以第一列为x轴,第二列为y轴画图 步骤如下: 1)使用readlines读取文件 2) ...

最新文章

  1. struts 页面取值问题
  2. linux挂载一个新的硬盘
  3. 1.7 Character类
  4. windows下python虚拟环境virtualenv安装和使用(亲测)
  5. 2015山东春考计算机分数排名,2015-2017年山东春季高考分数线.docx
  6. 选轻量应用服务器or云服务器ECS?一图帮你彻底区分
  7. (34)System Verilog类的多对象详解
  8. 基于JAVA+SpringBoot+Mybatis+MYSQL的足球联赛管理系统
  9. 完工任务不允许更改需求
  10. Shanda EZ Mini
  11. 数据分类分级指南数据服务分类类目表
  12. 软件质量应该如何保证?针对不同情况,项目各部门人员应如何保证软件质量?
  13. TP5.0Composer安装phpQuery
  14. excel透视表——制作动态饼图
  15. 数据中台在企业数字化转型中的践行(下篇)
  16. 数据中心为什么需要大二层网络
  17. ubuntu计算机名用户名,修改ubuntu的用户名(注意用户名和主机名的区别)
  18. 计算机怎么升级64位操作系统,32位系统怎么升级64位系统
  19. 从此开始,改头换面,重新做人
  20. 500错误及服务器内部错误

热门文章

  1. 3D打印技术新进展,正带来哪些产业新机会?
  2. React模拟后台项目(八)user页面文件配置
  3. 森林防火监控系统解决方案及标准权威解读
  4. cout保留两位小数位
  5. HTTP中常见的各种状态码详解及解决方案
  6. 我的java学习之路之Mybatis
  7. JS - 笛卡尔积算法
  8. C语言程序设计-同一天生日[综合应用]
  9. 挖一挖C#中那些我们不常用的东西之系列
  10. 数字经济的发展需要包括区块链在内的八大技术的支撑360云储