python二维散点图制作

要做一个二维散点图,表示距离随时间变化的过程。
原始数据是txt格式,具体如下:
在这里插入图片描述
第一步,首先是把txt中的数据提取出来,并稍微做下处理,截取时间数据和距离数据,由于距离是毫米单位,所以进行转化。代码如下

import os
import csv
import copy
import datetime
import numpy as np
import pandas as pd
def get_alldata(file_path):
    '''
    该函数用于实现提取txt文件的三列数据,存储在列表中
    file_path:txt文件路径
    实现步骤:
    首先按行读入txt文件,去掉每行的前后空格,存成新列表;
    定位到txt文件内数据的前一行,即'Segment 1:'处;
    将每行数据根据逗号','分离,分别存入三个空列表;
    即可得到分别存储了txt文件三列数据的三个列表。
    '''
    data_L=[]
    with open(file_path,'r') as f:#打开txt文件
        lines=f.readlines()#按行读取文件,并按行存储为列表
        new_lines=[]#建立新列表,存储去掉前后空格后的元素
        for line in lines:#遍历存储了文件信息的列表
            line = line.strip()#去掉每个元素中的前后空格
            new_lines.append(line)#存储去掉前后空格后的元素

        for i in range(0,len(new_lines),1):
            xyz=new_lines[i].split(' TAG0-ANC0=')#对列表元素根据逗号','分离为新列表
            xyz_cp=copy.deepcopy(xyz)#对列表进行深复制
            data_L.append(np.array(xyz_cp))#将数据存入列表
        time=[i[0] for i in data_L]#txt第一列数据
        distance=[i[1] for i in data_L]#txt第二列数据
        int_distance =[]
        for i in distance:
            temp = int(i)
            int_distance.append(temp/1000)
    return time,int_distance

file_path=r'20230919_173352RTLS1_log.txt'
time,distance=get_alldata(file_path)
df = pd.DataFrame({'时间':time,'距离':distance})
df.to_csv("20230919_17335.csv",index=False)

得到excel列表。
在这里插入图片描述
第二步,绘制二维散点图及坐标轴修改。

import csv
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from datetime import datetime
import numpy as np
import matplotlib.font_manager as fm

# 打开CSV文件
with open('20230919_17335.csv', 'r', encoding='utf-8') as file:
    reader = csv.reader(file)
    next(reader)  # 跳过第一行

    # 从每一行读取两列数据并存储在列表中
    timestamps = []
    distances = []
    for row in reader:
        timestamps.append(row[0])
        distances.append(float(row[1]))  # 将距离数据转换为浮点数类型

timestamps = [datetime.strptime(ts, "%H:%M:%S:%f") for ts in timestamps]

# 将时间和距离转换为numpy数组
timestamps = mdates.date2num(timestamps)
distances = np.array(distances)

# 绘制二维散点图
plt.scatter(timestamps, distances)

# 设置横轴为时间刻度
plt.gca().xaxis.set_major_locator(mdates.AutoDateLocator())  # 自动选择刻度
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%H:%M:%S:%f'))  # 格式化刻度为时间(包括毫秒部分)

# 设置起始时间和结束时间
start_time = timestamps.min()
end_time = timestamps.max()

# 自定义横坐标刻度
locator = mdates.MinuteLocator(interval=1)
plt.gca().xaxis.set_major_locator(locator)
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%H:%M'))

# 限制横坐标范围
plt.xlim(start_time, end_time)

# 设置图表标题和坐标轴标签
plt.rcParams["font.sans-serif"]=["SimHei"]
plt.rcParams["axes.unicode_minus"]=False
plt.title('Scatter Plot')
plt.xlabel('时间(min)')
plt.ylabel('距离(m)')

# 显示图形
plt.show()

二维散点图结果如下:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值