要做一个二维散点图,表示距离随时间变化的过程。
原始数据是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()
二维散点图结果如下: