python matplotlib 绘制二维数据中某些列到折线图,没有线的解决方法
results.txt中的文本数据是这样的.
{ "epoch":0, "imgindex":0, "imgcount":63, "lr":0.0002 , "loss":3.2448 , "loss_classifier":2.5456 , "loss_box_reg":0.0000 , "loss_mask":0.0000 , "loss_objectness":0.6903 , "loss_rpn_box_reg":0.0089 , "time":31.9483, "data":12.9320, "GPUMemory":2177 }
{ "epoch":0, "imgindex":20, "imgcount":63, "lr":0.0034 , "loss":3.6288 , "loss_classifier":2.2065 , "loss_box_reg":0.0035 , "loss_mask":0.7142 , "loss_objectness":0.6809 , "loss_rpn_box_reg":0.0142 , "time":1.7869, "data":0.1222, "GPUMemory":3140 }
{ "epoch":0, "imgindex":40, "imgcount":63, "lr":0.0066 , "loss":1.0768 , "loss_classifier":0.0840 , "loss_box_reg":0.0093 , "loss_mask":0.7100 , "loss_objectness":0.1529 , "loss_rpn_box_reg":0.0186 , "time":0.7657, "data":0.1278, "GPUMemory":3140 }
{ "epoch":0, "imgindex":60, "imgcount":63, "lr":0.0098 , "loss":0.8712 , "loss_classifier":0.0616 , "loss_box_reg":0.0064 , "loss_mask":0.6750 , "loss_objectness":0.0762 , "loss_rpn_box_reg":0.0127 , "time":0.7116, "data":0.0756, "GPUMemory":3156 }
{ "epoch":0, "imgindex":62, "imgcount":63, "lr":0.0100 , "loss":0.8712 , "loss_classifier":0.0616 , "loss_box_reg":0.0069 , "loss_mask":0.6750 , "loss_objectness":0.0704 , "loss_rpn_box_reg":0.0112 , "time":0.7035, "data":0.0756, "GPUMemory":3156 }
{ "epoch":1, "imgindex":0, "imgcount":63, "lr":0.0100 , "loss":0.8573 , "loss_classifier":0.0519 , "loss_box_reg":0.0147 , "loss_mask":0.7056 , "loss_objectness":0.0710 , "loss_rpn_box_reg":0.0140 , "time":12.6762, "data":12.0246, "GPUMemory":3156 }
{ "epoch":1, "imgindex":20, "imgcount":63, "lr":0.0100 , "loss":0.8407 , "loss_classifier":0.0779 , "loss_box_reg":0.0193 , "loss_mask":0.6626 , "loss_objectness":0.0539 , "loss_rpn_box_reg":0.0151 , "time":0.7691, "data":0.1215, "GPUMemory":3156 }
{ "epoch":1, "imgindex":40, "imgcount":63, "lr":0.0100 , "loss":0.7553 , "loss_classifier":0.0395 , "loss_box_reg":0.0011 , "loss_mask":0.6084 , "loss_objectness":0.0866 , "loss_rpn_box_reg":0.0156 , "time":0.6852, "data":0.0516, "GPUMemory":3156 }
{ "epoch":1, "imgindex":60, "imgcount":63, "lr":0.0100 , "loss":0.8489 , "loss_classifier":0.0594 , "loss_box_reg":0.0133 , "loss_mask":0.6666 , "loss_objectness":0.0681 , "loss_rpn_box_reg":0.0146 , "time":0.8134, "data":0.1637, "GPUMemory":3156 }
{ "epoch":1, "imgindex":62, "imgcount":63, "lr":0.0100 , "loss":0.8576 , "loss_classifier":0.0601 , "loss_box_reg":0.0166 , "loss_mask":0.6531 , "loss_objectness":0.0699 , "loss_rpn_box_reg":0.0146 , "time":0.8066, "data":0.1636, "GPUMemory":3156 }
{ "epoch":2, "imgindex":0, "imgcount":63, "lr":0.0100 , "loss":0.1494 , "loss_classifier":0.0470 , "loss_box_reg":0.0000 , "loss_mask":0.0000 , "loss_objectness":0.0822 , "loss_rpn_box_reg":0.0202 , "time":13.3777, "data":12.7521, "GPUMemory":3156 }
{ "epoch":2, "imgindex":20, "imgcount":63, "lr":0.0100 , "loss":0.8790 , "loss_classifier":0.0629 , "loss_box_reg":0.0055 , "loss_mask":0.6817 , "loss_objectness":0.0797 , "loss_rpn_box_reg":0.0121 , "time":0.8539, "data":0.2024, "GPUMemory":3156 }
{ "epoch":2, "imgindex":40, "imgcount":63, "lr":0.0100 , "loss":0.7611 , "loss_classifier":0.0461 , "loss_box_reg":0.0101 , "loss_mask":0.6072 , "loss_objectness":0.0531 , "loss_rpn_box_reg":0.0119 , "time":0.6516, "data":0.0061, "GPUMemory":3156 }
{ "epoch":2, "imgindex":60, "imgcount":63, "lr":0.0100 , "loss":0.8804 , "loss_classifier":0.0712 , "loss_box_reg":0.0410 , "loss_mask":0.6410 , "loss_objectness":0.0652 , "loss_rpn_box_reg":0.0173 , "time":0.6745, "data":0.0346, "GPUMemory":3156 }
{ "epoch":2, "imgindex":62, "imgcount":63, "lr":0.0100 , "loss":0.8526 , "loss_classifier":0.0663 , "loss_box_reg":0.0350 , "loss_mask":0.6372 , "loss_objectness":0.0652 , "loss_rpn_box_reg":0.0170 , "time":0.6737, "data":0.0334, "GPUMemory":3156 }
{ "epoch":3, "imgindex":0, "imgcount":63, "lr":0.0100 , "loss":1.0212 , "loss_classifier":0.1881 , "loss_box_reg":0.0681 , "loss_mask":0.6798 , "loss_objectness":0.0648 , "loss_rpn_box_reg":0.0204 , "time":12.8021, "data":12.1545, "GPUMemory":3156 }
{ "epoch":3, "imgindex":20, "imgcount":63, "lr":0.0100 , "loss":0.8134 , "loss_classifier":0.0495 , "loss_box_reg":0.0202 , "loss_mask":0.6327 , "loss_objectness":0.0553 , "loss_rpn_box_reg":0.0143 , "time":0.7610, "data":0.1089, "GPUMemory":3156 }
{ "epoch":3, "imgindex":40, "imgcount":63, "lr":0.0100 , "loss":0.8319 , "loss_classifier":0.0645 , "loss_box_reg":0.0041 , "loss_mask":0.6497 , "loss_objectness":0.0677 , "loss_rpn_box_reg":0.0143 , "time":0.7960, "data":0.1426, "GPUMemory":3156 }
{ "epoch":3, "imgindex":60, "imgcount":63, "lr":0.0100 , "loss":0.8450 , "loss_classifier":0.0851 , "loss_box_reg":0.0353 , "loss_mask":0.6324 , "loss_objectness":0.0646 , "loss_rpn_box_reg":0.0112 , "time":0.6900, "data":0.0534, "GPUMemory":3156 }
{ "epoch":3, "imgindex":62, "imgcount":63, "lr":0.0100 , "loss":0.8455 , "loss_classifier":0.0882 , "loss_box_reg":0.0360 , "loss_mask":0.6351 , "loss_objectness":0.0534 , "loss_rpn_box_reg":0.0105 , "time":0.6847, "data":0.0535, "GPUMemory":3156 }
{ "epoch":4, "imgindex":0, "imgcount":63, "lr":0.0100 , "loss":0.1181 , "loss_classifier":0.0425 , "loss_box_reg":0.0000 , "loss_mask":0.0000 , "loss_objectness":0.0597 , "loss_rpn_box_reg":0.0159 , "time":12.8091, "data":12.1755, "GPUMemory":3156 }
{ "epoch":4, "imgindex":20, "imgcount":63, "lr":0.0100 , "loss":0.8551 , "loss_classifier":0.0512 , "loss_box_reg":0.0236 , "loss_mask":0.5953 , "loss_objectness":0.0606 , "loss_rpn_box_reg":0.0136 , "time":0.8668, "data":0.2161, "GPUMemory":3156 }
{ "epoch":4, "imgindex":40, "imgcount":63, "lr":0.0100 , "loss":0.8365 , "loss_classifier":0.0867 , "loss_box_reg":0.0317 , "loss_mask":0.6267 , "loss_objectness":0.0467 , "loss_rpn_box_reg":0.0139 , "time":0.7096, "data":0.0670, "GPUMemory":3156 }
{ "epoch":4, "imgindex":60, "imgcount":63, "lr":0.0100 , "loss":0.8199 , "loss_classifier":0.1017 , "loss_box_reg":0.0467 , "loss_mask":0.5918 , "loss_objectness":0.0750 , "loss_rpn_box_reg":0.0159 , "time":0.7013, "data":0.0584, "GPUMemory":3156 }
{ "epoch":4, "imgindex":62, "imgcount":63, "lr":0.0100 , "loss":0.9040 , "loss_classifier":0.1018 , "loss_box_reg":0.0560 , "loss_mask":0.6074 , "loss_objectness":0.0750 , "loss_rpn_box_reg":0.0159 , "time":0.6953, "data":0.0575, "GPUMemory":3156 }
{ "epoch":5, "imgindex":0, "imgcount":63, "lr":0.0100 , "loss":0.0743 , "loss_classifier":0.0040 , "loss_box_reg":0.0000 , "loss_mask":0.0000 , "loss_objectness":0.0536 , "loss_rpn_box_reg":0.0168 , "time":12.8451, "data":12.2135, "GPUMemory":3156 }
{ "epoch":5, "imgindex":20, "imgcount":63, "lr":0.0100 , "loss":0.7978 , "loss_classifier":0.0431 , "loss_box_reg":0.0129 , "loss_mask":0.6468 , "loss_objectness":0.0534 , "loss_rpn_box_reg":0.0108 , "time":0.7597, "data":0.1117, "GPUMemory":3156 }
{ "epoch":5, "imgindex":40, "imgcount":63, "lr":0.0100 , "loss":0.8960 , "loss_classifier":0.0784 , "loss_box_reg":0.0326 , "loss_mask":0.6608 , "loss_objectness":0.0534 , "loss_rpn_box_reg":0.0162 , "time":0.7539, "data":0.1020, "GPUMemory":3156 }
{ "epoch":5, "imgindex":60, "imgcount":63, "lr":0.0100 , "loss":0.8618 , "loss_classifier":0.0936 , "loss_box_reg":0.0499 , "loss_mask":0.6044 , "loss_objectness":0.0594 , "loss_rpn_box_reg":0.0152 , "time":0.7365, "data":0.0846, "GPUMemory":3156 }
{ "epoch":5, "imgindex":62, "imgcount":63, "lr":0.0100 , "loss":0.9147 , "loss_classifier":0.0936 , "loss_box_reg":0.0499 , "loss_mask":0.6383 , "loss_objectness":0.0447 , "loss_rpn_box_reg":0.0152 , "time":0.6980, "data":0.0501, "GPUMemory":3156 }
{ "epoch":6, "imgindex":0, "imgcount":63, "lr":0.0100 , "loss":1.5819 , "loss_classifier":0.2886 , "loss_box_reg":0.2014 , "loss_mask":0.9627 , "loss_objectness":0.1051 , "loss_rpn_box_reg":0.0240 , "time":13.2378, "data":12.5113, "GPUMemory":3156 }
{ "epoch":6, "imgindex":20, "imgcount":63, "lr":0.0100 , "loss":0.8689 , "loss_classifier":0.0960 , "loss_box_reg":0.0419 , "loss_mask":0.6413 , "loss_objectness":0.0611 , "loss_rpn_box_reg":0.0136 , "time":0.7089, "data":0.0535, "GPUMemory":3156 }
{ "epoch":6, "imgindex":40, "imgcount":63, "lr":0.0100 , "loss":0.7758 , "loss_classifier":0.0517 , "loss_box_reg":0.0251 , "loss_mask":0.5768 , "loss_objectness":0.0629 , "loss_rpn_box_reg":0.0119 , "time":0.9487, "data":0.2802, "GPUMemory":3156 }
{ "epoch":6, "imgindex":60, "imgcount":63, "lr":0.0100 , "loss":0.8633 , "loss_classifier":0.0808 , "loss_box_reg":0.0355 , "loss_mask":0.6135 , "loss_objectness":0.0591 , "loss_rpn_box_reg":0.0149 , "time":0.6702, "data":0.0343, "GPUMemory":3156 }
{ "epoch":6, "imgindex":62, "imgcount":63, "lr":0.0100 , "loss":0.8633 , "loss_classifier":0.0808 , "loss_box_reg":0.0355 , "loss_mask":0.6135 , "loss_objectness":0.0591 , "loss_rpn_box_reg":0.0149 , "time":0.6635, "data":0.0342, "GPUMemory":3156 }
{ "epoch":7, "imgindex":0, "imgcount":63, "lr":0.0100 , "loss":0.2361 , "loss_classifier":0.0167 , "loss_box_reg":0.0002 , "loss_mask":0.1616 , "loss_objectness":0.0511 , "loss_rpn_box_reg":0.0065 , "time":12.7431, "data":12.1155, "GPUMemory":3156 }
{ "epoch":7, "imgindex":20, "imgcount":63, "lr":0.0100 , "loss":0.8250 , "loss_classifier":0.0889 , "loss_box_reg":0.0388 , "loss_mask":0.6147 , "loss_objectness":0.0535 , "loss_rpn_box_reg":0.0140 , "time":0.8481, "data":0.2082, "GPUMemory":3156 }
{ "epoch":7, "imgindex":40, "imgcount":63, "lr":0.0100 , "loss":0.8195 , "loss_classifier":0.0845 , "loss_box_reg":0.0551 , "loss_mask":0.5938 , "loss_objectness":0.0565 , "loss_rpn_box_reg":0.0155 , "time":0.8044, "data":0.1416, "GPUMemory":3156 }
{ "epoch":7, "imgindex":60, "imgcount":63, "lr":0.0100 , "loss":0.7695 , "loss_classifier":0.0654 , "loss_box_reg":0.0317 , "loss_mask":0.5683 , "loss_objectness":0.0475 , "loss_rpn_box_reg":0.0105 , "time":0.7677, "data":0.1099, "GPUMemory":3156 }
{ "epoch":7, "imgindex":62, "imgcount":63, "lr":0.0100 , "loss":0.7389 , "loss_classifier":0.0654 , "loss_box_reg":0.0317 , "loss_mask":0.5634 , "loss_objectness":0.0472 , "loss_rpn_box_reg":0.0127 , "time":0.7940, "data":0.1415, "GPUMemory":3156 }
{ "epoch":8, "imgindex":0, "imgcount":63, "lr":0.0100 , "loss":0.5342 , "loss_classifier":0.0315 , "loss_box_reg":0.0125 , "loss_mask":0.4456 , "loss_objectness":0.0313 , "loss_rpn_box_reg":0.0133 , "time":13.4497, "data":12.7742, "GPUMemory":3156 }
刚开始是这样的.代码
# 读取文本文件,
# 1. 自动去除utf8 BOM 头
# 2. 统一 \r\n 转成 \n
def ReadAllTextFromFile(str,encoding='utf-8'):try: with open(str,'r+',encoding=encoding) as f:s = f.read().replace('\r\n','\n')if ord(s[0]) == 65279:# 65279 对应的是 \xfeff 是BOM头.所以去掉return s[1:]if ord(s[0]) == 65534:# 65534 对应的是 \xfffe 是BOM头.所以去掉return s[1:]if ord(s[0]) == 4294836224:# 4294836224 对应的是 \xfffe0000 是BOM头.所以去掉return s[1:]return sexcept Exception as ex:print(ex)return ""# 取得所有的行数, splitlines 不带换行符
def ReadAllLinesFromFile(str,encoding='utf-8'):txt = ReadAllTextFromFile(str,encoding)return txt.splitlines()# 根据results.txt 绘制关键参数results.png图,
def plot_resultsimage(save_dir=''): # from utils.general import *; plot_results()# Plot training 'results*.txt' as seen in https://github.com/ultralytics/yolov5#reproduce-our-trainingfig, ax = plt.subplots(2, 4, figsize=(12, 6))ax = ax.ravel()labels = ['lr','loss','loss_classifier','loss_box_reg','loss_mask','loss_objectness','loss_rpn_box_reg']files = glob.glob(str(Path(save_dir) / 'results*.txt'))for fi, f in enumerate(files):# try:# results = np.loadtxt(f, usecols=[2, 3, 4, 8, 9, 12, 13, 14, 10, 11], ndmin=2).Tlines = ReadAllLinesFromFile(f)results = []for txtrow in lines:results.append(json.loads(txtrow))for colindex, label in enumerate(labels): for rowindex, row in enumerate(results):ax[colindex].plot(rowindex, row[label], linestyle='--', marker='.', label=label, linewidth=2, markersize=2)ax[colindex].set_title(label)# except Exception as e:# print(str(e))# fig.tight_layout()# ax[1].legend()fig.savefig(Path(save_dir) / 'results.png', dpi=200)# fig.show()pass
得到结果是这样的.没有折线.百思不得其解
而且看上去好像是不对的.后来仔细的看了很多次, 改成下面的代码就可以了
正确的绘制折线图的方法
import matplotlib
import matplotlib.pyplot as plt
import glob
from pathlib import Path
import numpy as np
import json# 读取文本文件,
# 1. 自动去除utf8 BOM 头
# 2. 统一 \r\n 转成 \n
def ReadAllTextFromFile(str,encoding='utf-8'):try: with open(str,'r+',encoding=encoding) as f:s = f.read().replace('\r\n','\n')if ord(s[0]) == 65279:# 65279 对应的是 \xfeff 是BOM头.所以去掉return s[1:]if ord(s[0]) == 65534:# 65534 对应的是 \xfffe 是BOM头.所以去掉return s[1:]if ord(s[0]) == 4294836224:# 4294836224 对应的是 \xfffe0000 是BOM头.所以去掉return s[1:]return sexcept Exception as ex:print(ex)return ""# 取得所有的行数, splitlines 不带换行符
def ReadAllLinesFromFile(str,encoding='utf-8'):txt = ReadAllTextFromFile(str,encoding)return txt.splitlines()def plot_resultsimage(save_dir=''): # from utils.general import *; plot_results()# Plot training 'results*.txt' as seen in https://github.com/ultralytics/yolov5#reproduce-our-trainingfig, ax = plt.subplots(2, 4, figsize=(12, 6))ax = ax.ravel()labels = ['lr','loss','loss_classifier','loss_box_reg','loss_mask','loss_objectness','loss_rpn_box_reg']files = glob.glob(str(Path(save_dir) / 'results*.txt'))for fi, f in enumerate(files):# try:# results = np.loadtxt(f, usecols=[2, 3, 4, 8, 9, 12, 13, 14, 10, 11], ndmin=2).Tlines = ReadAllLinesFromFile(f)results = []for txtrow in lines:results.append(json.loads(txtrow)) for colindex, label in enumerate(labels): # for rowindex, row in enumerate(results):coldatas = [row[label] for row in results] ax[colindex].plot(coldatas, marker='.', label=label, linewidth=1, markersize=3)ax[colindex].set_title(label)# except Exception as e:# print(str(e))# fig.tight_layout()# ax[1].legend()fig.savefig(Path(save_dir) / 'results.png', dpi=200)# fig.show()pass
这样的结果就正常了.
第一种代码在输出的时候, 依次循环每个坐标图, 每次画一个点,导致它无法知道上一个点的位置, 所以也就无法连续性的绘制折线,
只要一次性给每个子图投入所有的数据点即可绘制出折线, 而且第二次再调用的时候, 线的颜色会自动变化.
主要的代码变化在 coldatas = [row[label] for row in results] 这一行.
会猜真的是太重要了…
python matplotlib 绘制二维数据中某些列到折线图,没有线的解决方法相关推荐
- 【机器学习】python使用matplotlib进行二维数据绘图并保存为png图片
端到端机器学习导航: [机器学习]python借助pandas加载并显示csv数据文件,并绘制直方图 [机器学习]python使用matplotlib进行二维数据绘图并保存为png图片 [机器学习]p ...
- 深入浅出python机器学习_如何用python画(绘制)二维函数(二维图)?
参考文档 python 如何绘制二维函数? from matplotlib import pyplot as plt import numpy as np low=lambda x:10000 if ...
- Java黑皮书课后题第8章:*8.27(列排序)用下面的方法实现一个二维数组中的列排序。返回新数组,且原数组保持不变。编写一个测试程序,提示用户输入一个3*3的double型矩阵,显示一个排好的矩阵
*8.27(列排序)用下面的方法实现一个二维数组中的列排序.返回新数组,且原数组保持不变.编写一个测试程序,提示用户输入一个3*3的double型矩阵,显示一个排好的矩阵 题目 题目描述与运行示例 破 ...
- Python——两类二维数据线性判别fisher
题目: 说明:下述问题在 Python 中编程求解. 1.已知两类二维数据, (1)第一类共 4 个样本:[6,6],[4,5],[5,5],[5,4],第二类共 4 个样本: [0,1],[1,2] ...
- Deep learning:十一(PCA和whitening在二维数据中的练习)
前言: 这节主要是练习下PCA,PCA Whitening以及ZCA Whitening在2D数据上的使用,2D的数据集是45个数据点,每个数据点是2维的.参考的资料是:Exercise:PCA in ...
- python 一,二维数据的个数化和处理
目录 数据的几种类型 数据的操作周期 一维数据 一维数据的表示 一维数据的存储 一维数据的处理 一维数据的读入处理 一维数据的写入处理 二维数据 二维数据的表示 CSV格式 二维数据的存储 二维数据的 ...
- Python找出二维数组中某个元素索引,自定义函数
#函数:找出二维数组中某个元素的索引 #功能:返回目标元素在原数组中出现位置的所有索引号 def found(List,AimList):#List:搜索数组,AimList:目标元素print('原 ...
- python matplotlib绘制 3D图像专题 (三维柱状图、曲面图、散点图、曲线图合集)
python matplotlib 绘制3D图表 文章目录 1. 绘制3D柱状图 2. 绘制3D曲面图 ① 示例1 ② 示例2 3.绘制3D散点图 4. 绘制3D曲线图 ʚʕ̯•͡˔•̯᷅ ...
- php某列为键数组为值,PHP 将二维数组中某列值作为数组的键名 -- 超实用
有时候,想通过数组的中某字段值, 然后再在二维数组中获取存在该字段值的数组: 一般能想到的就是foreach 遍历比较一下跟该字段值一样,就获取到想要的数组,如下: //测试二维数组 $arr =ar ...
最新文章
- 报名 | 赢取20万美金!Call For Code编程马拉松北京站来袭!
- [原创]软件测试思维方式
- c# winform datagridview改变表头标题的颜色(column header)
- Spring Boot中带有CKEditor的AJAX
- 语义化版本控制规范(SemVer)
- LeetCode 326. 3的幂
- 【华为云技术分享】ArcFace简介
- com 组件调用不起来_Spring Cloud Alibaba,分布式服务调用(四)
- spring mvc mvc:default-servlet-handler / 。
- 利用composer搭建PHP框架(四.数据库与缓存)
- iQOO Neo6 SE什么时候发布 iQOO Neo6 SE配置如何
- Google桌面搜索使用与技巧
- 时间序列--残差分析
- 【网络工程】浅显易懂TCP/IP协议 三次握手 四次挥手
- 微信在线EXCEL自动统计人数
- 数字电路与逻辑电路芯片
- LINUX系统编程 LINUX 虚拟内存
- MXNet 定义新激活函数(Custom new activation function)
- 转:电子邮件的工作原理
- ISO三体系是指什么?