python_读取txt文件绘制多条曲线III

news2025/1/13 15:53:58

先把文件中指定列,去重提取出来,然后根据指定列去匹配数据,最后完成多条数据的绘图;

import matplotlib.pyplot as plt
import re
from datetime import datetime
from pylab import mpl

mpl.rcParams["font.sans-serif"] = ["SimHei"]  # 设置显示中文字体
mpl.rcParams["axes.unicode_minus"] = False  # 设置正常显示符号

"""
out_los_GDHZ.txt文件内容
2024/03/05 05:50:01  sys:  1,prn:  8, f :  0, rr :  22776258.520521, cdts :  9499.326017, dtrpr :  0.000000, ionxr :  16.994414, dantr :  0.000000, dantrr[findex] :  0.000000, scb :  0.000000, 
2024/03/05 05:50:01  sys:  1,prn:  8, f :  0, rr :  22776258.520521, cdts :  9499.326017, dtrpr :  0.000000, ionxr :  16.994414, dantr :  0.000000, dantrr[findex] :  0.000000, scb :  0.000000, 
2024/03/05 05:50:01  sys:  1,prn:  8, f :  1, rr :  22776258.520521, cdts :  9499.326017, dtrpr :  0.000000, ionxr :  30.475578, dantr :  0.000000, dantrr[findex] :  0.000000, scb :  0.000000, 
2024/03/05 05:50:01  sys:  1,prn:  8, f :  1, rr :  22776258.520521, cdts :  9499.326017, dtrpr :  0.000000, ionxr :  30.475578, dantr :  0.000000, dantrr[findex] :  0.000000, scb :  0.000000, 
2024/03/05 05:50:01  sys:  1,prn:  14, f :  0, rr :  23343648.060891, cdts :  102648.741372, dtrpr :  0.000000, ionxr :  19.831918, dantr :  0.000000, dantrr[findex] :  0.000000, scb :  0.000000, 
2024/03/05 05:50:01  sys:  1,prn:  14, f :  0, rr :  23343648.060891, cdts :  102648.741372, dtrpr :  0.000000, ionxr :  19.831918, dantr :  0.000000, dantrr[findex] :  0.000000, scb :  0.000000, 
2024/03/05 05:50:01  sys:  1,prn:  14, f :  1, rr :  23343648.060891, cdts :  102648.741372, dtrpr :  0.000000, ionxr :  35.563990, dantr :  0.000000, dantrr[findex] :  0.000000, scb :  0.000000, 
2024/03/05 05:50:01  sys:  1,prn:  14, f :  1, rr :  23343648.060891, cdts :  102648.741372, dtrpr :  0.000000, ionxr :  35.563990, dantr :  0.000000, dantrr[findex] :  0.000000, scb :  0.000000, 
2024/03/05 05:50:01  sys:  1,prn:  30, f :  0, rr :  21635324.825727, cdts : -127128.592610, dtrpr :  0.000000, ionxr :  14.159144, dantr :  0.000000, dantrr[findex] :  0.000000, scb :  0.000000, 
2024/03/05 05:50:01  sys:  1,prn:  30, f :  0, rr :  21635324.825727, cdts : -127128.592610, dtrpr :  0.000000, ionxr :  14.159144, dantr :  0.000000, dantrr[findex] :  0.000000, scb :  0.000000, 
"""

# 第一步,去重提取出指定列的数据
def get_sys():
    # 用于存储去重后的数据
    unique_data = set()
    with open('out_los_GDHZ_1.txt', 'r') as file:
        lines = file.readlines()
        # 因数据重复,隔行读取数据
        for line in lines[::2]:
            # 多个分隔符来分割
            temp = re.split("[,| ]+", line)
            # 提取指定的多列
            selected_columns = [temp[3], temp[5], temp[8]]
            # 将选定的列转换为元组,以便用于集合中的去重
            selected_columns_tuple = tuple(selected_columns)
            # 将元组添加到集合中
            unique_data.add(selected_columns_tuple)

    # 将集合转换回列表
    unique_data_list = list(unique_data)
    # print(unique_data_list)
    return unique_data_list

# 第二步,根据指定的数据再统计、绘图
def static():
    with open('out_los_GDHZ_1.txt', 'r') as file:
        lines = file.readlines()

        sys = get_sys()
        ls = len(sys)
        # 使用字典推导式生成对应数量的空列表和0,并为它们重新命名
        time_lists = {f'time_list_{i}': [] for i in range(ls)}
        ionxr_lists = {f'ionxr_list_{i}': [] for i in range(ls)}
        # count_lists = {f'count_list_{i}': 0 for i in range(ls)}

        # 因数据重复,隔行读取数据
        for line in lines[::2]:
            # 多个分隔符来分割
            temp = re.split("[,| ]+", line)
            for j in range(0, len(sys)):
                if (temp[3] == str(sys[j][0])) & (temp[5] == str(sys[j][1])) & (temp[8] == str(sys[j][2])):
                    datee = temp[0]
                    timee = temp[1]
                    ionxr = temp[20]
                    dt = datee + " " + timee
                    time_list = datetime.strptime(dt, "%Y/%m/%d %H:%M:%S")
                    time_lists['time_list_' + str(j)].append(time_list)
                    ionxr_lists['ionxr_list_' + str(j)].append(ionxr)
                    # count_lists['count_list_' + str(j)] += 1
                    # print(time_lists['time_list_'+str(j)],ionxr_lists['ionxr_list_'+str(j)])

        # 绘制线形图
        plt.title(u'电离层活跃状况')
        for j in range(0, len(sys)):
            plt.plot(time_lists['time_list_' + str(j)], ionxr_lists['ionxr_list_' + str(j)])
            # print(count_lists['count_list_' + str(j)])

        # 设置x轴标签和y轴标签
        plt.xlabel(u"日期")
        plt.ylabel(u"电离层系数")

        # 显示图表
        plt.show()


if __name__ == '__main__':
    static()

因数据量达到三百多万条,16G内存的笔记本运行时报MemoryError,内存干爆了,消耗了98%,重新截取出二十多万条数据跑出来的结果,有40个线条;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1497240.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

算法沉淀——动态规划之其它背包问题与卡特兰数(leetcode真题剖析)

算法沉淀——动态规划之其它背包问题与卡特兰数 二维费用的背包问题01.一和零02.盈利计划 似包非包组合总和 Ⅳ 卡特兰数不同的二叉搜索树 二维费用的背包问题 01.一和零 题目链接:https://leetcode.cn/problems/ones-and-zeroes/ 给你一个二进制字符串数组 strs…

selenium中ChromeDriver配置,一把过,并且教你伪装

最近正值毕业季,我之前不是写了个问卷星代码嘛,昨晚上有人凌晨1点加我,问我相关内容。 由于我之前C盘重装了一下,导致我很多东西空有其表,实际不能用,借此机会,向大家编写ChromeDriver配置&…

Nginx启动服务

Nginx启动服务 一、启动前置 下载地址 如已安装Docker,下一步拉取Nginx最新的Docker镜像: docker pull nginx:latest查看拉取下来的镜像: docker images二、启动服务 创建Docker容器: docker run --name {projectname} -p 80…

开发充电桩APP提高管理效能

随着社会的发展,电动车已经成为城市交通的重要组成部分,用户所下载的充电类的APP也非常大,而充电桩的建设和利用效率成为了一个亟待解决的问题。在这个背景下,物联网技术的应用成为了提高充电桩效能的关键。虎克技术公司在此领域提…

3Dmax中VR渲染太阳光渲染参数怎么设置?渲染100云渲染助力

我们用3Dmax建模时一些场景会用到太阳光,那么渲染参数是如何设置的呢? 我们一起来看看,直接上图 以上就是详细的参数设置,大家可以用做参考,如果本地渲染慢的朋友可以考虑使用云渲染100 机器多,渲染稳定不…

Qt6.6搭建WebAssembly

1.首先安装python , 链接:https://www.python.org/ 2.下载并安装qt6. 3.克隆emsdk工程 3.1 进入emsdk目录,然后更新emsdk代码 3.2 下载并安装最新的SDK工具。(C:\Qt\emsdk>emsdk install --global latest) 3.3…

收银系统源码-智慧新零售2.0小助手全新升级!

欢迎后台私信,测试体验! 新零售助手是智慧新零售系统的移动管理端,尤其针对商户/门店日常经营必不可少的一环。智慧新零售2.0版小助手也进行了全新升级,使用起来更简单,页面更美观。小助手采用微信小程序登陆&#xf…

QEMU调试——通过获取设备树(dtb文件)查询开发板的外设地址信息

1、适用场景 使用qemu时,想快速知道开发板的地址空间映射情况,特别是某些外设控制器的寄存器基地址 2、查询QEMU支持的开发板 qemu-system-riscv32.exe -M ? 3、获取开发板对应的dtb文件 1、qemu-system-riscv32.exe -M nuclei_evalsoc 2、dumpdtb nucl…

【linuxC语言】系统调用IO文件操作

文章目录 前言一、文件描述符介绍二、系统调用IO API介绍2.1 open函数2.2 close函数2.3 read函数2.4 write函数2.5 lseek函数 三、示例代码总结 前言 在Linux系统中,C语言通过系统调用实现对文件的输入输出(I/O)操作。系统调用提供了访问操作…

Windows下JDK下载、配置Java环境变量配置及多个JDK使用

Windows下JDK下载、配置Java环境变量配置及多个JDK使用 1. Windows下配置Java-JDK环境变量 1.1 下载Windows版本JDK 下载地址:(https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html) 1.2 Windows下安装JDK 双击进行安装 下一步&#xf…

SpringCloud 服务的注册与发现

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅,从传统的模块之间调用,一步步的升级为 SpringCloud 模块之间的调用,此篇文章为第二篇,即使用服务注册和发现的组件,此篇文章会介绍 Eureka、Zookeeper 和 Consu…

ZYNQ linux笔记 --- Linux UIO框架下调用HLS ip核

目标 编写了 HLS IP核,实现对图像的缩放,已通过HLS 仿真验证和裸机验证,想在Linux端调用该IP 工程构建 简单描述一下,vdma出来连接 resize ip核,resize ip核后面接 vid_out ip resize ip核的 interrput 接口通过 xlconcat ip 连接到PS端中断接口IRQ,这一点很重要! 导…

透视和仿射变换的区别

仿射变换矩阵通常是2x3的矩阵。 三个特点: 直线依然是直线平行线依然平行 [ x ′ y ′ 1 ] [ a 11 a 12 b 1 a 21 a 22 b 2 0 0 1 ] [ x y 1 ] x ′ a 11 ∗ x a 12 ∗ y b 1 y ′ a 21 ∗ x a 22 ∗ y b 2 \begin{gathered} \begin{bmatrix}x\\y\\1\end{b…

2023年全国职业院校技能大赛 GZ073网络系统管理赛项 模块A:网络构建(运维配置)

1.完成整网连通后,进入网络监控运维阶段,运维软件已安装在PC的虚拟机中,通过运维平台监控拓扑中所有网络设备(AP除外)。考试现场提供运维平台登陆的用户名密码信息。 2.通过运维平台将被监控设备纳入监控范围;通过拓扑配置功能,将网络拓扑配置到平台中。

【视觉AIGC识别】误差特征、人脸伪造检测、其他类型假图检测

视觉AIGC识别——人脸伪造检测、误差特征 不可见水印 前言视觉AIGC识别【误差特征】DIRE for Diffusion-Generated Image Detection方法扩散模型的角色DIRE作为检测指标 实验结果泛化能力和抗扰动 人脸伪造监测(Face Forgery Detection)人脸伪造图生成 …

【Python】成功解决TypeError: ‘float‘ object is not iterable

【Python】成功解决TypeError: ‘float’ object is not iterable 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得…

为什么桌面领域没有一款 Linux 或 UNIX 能与 Windows 鼎足而立?

为什么桌面领域没有一款 Linux 或 UNIX 能与 Windows 鼎足而立? 在开始前我有一些资料,是我根据网友给的问题精心整理了一份「Linux 的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享…

大数据揭秘!不得不提的企业数据查询的隐藏宝藏平台。

在现代社会,企业数据已经成为了衡量一个公司实力、潜力以及未来走势的重要指标之一。对于投资者、分析师和企业家来说,获取这些数据并进行深度分析显得尤为重要。那么,如何查询到企业的数据呢?本文将为您介绍一些可以查询企业数据…

sql server使用逗号,分隔保存多个id的一些查询保存

方案一,前后不附加逗号: 方案二,前后附加逗号: 其他保存方案: (这里是我做一个程序的商家日期规则搞得,后面再补具体操作): 1,2,3 | 1,2,3 | 1,2,3; 1,2,3 &#xff1…

尤雨溪:Vue 未来展望新的一轮

十年,一个既漫长又短暂的时光跨度,对于技术世界来说,更是沧海桑田的瞬间。在这十年里,Vue.js 从无到有,从默默无闻到蜚声全球,不仅改变了前端开发的面貌,更成为了无数开发者手中的得力工具。 在…