通过python读取txt文件和绘制柱形图的实现代码
目的
临床数据的记录时间和对应标签(逗号后面的数字)记录在txt文件里,要把标签转换为3类标签,并且计算出每个标签的分别持续时间,然后绘制成柱形图方便查阅。
小难点分析:
(1)txt的切割读取对应内容
(2)时间差计算
使用效果
首先将原始txt转换为 左列新标签右列持续时间
绘制为柱形图
为了直观,每次只最多显示2个小时,同时横坐标还是按照临床的记录时间顺序。
代码实现
#-*-coding:utf-8-*-
fromdatetimeimportdatetime
importmatplotlib.pyplotasplt
frommatplotlib.font_managerimportFontProperties
font_set=FontProperties(fname=r"c:\windows\fonts\simsun.ttc",size=12)
address="D:/XXXXXX/"
patient="XXXXX"
year='2020'#or2020
txt_address=address+patient+"/timetable.txt"
filename=address+patient+"/newTimeTable.txt"#保存的txt地址
#读取txt的相应内容
defshowLabel():
content=[]
label=[]
rawtime=[]
withopen(txt_address,'r',encoding="utf-8")asf:
lines=f.readlines()#返回的是列表
print("文件的行数:%d"%len(lines))
forlineinlines:
content_value=line.split(sep=',')#分为[0]和[1]
time_value=content_value[0].split(sep=year)
content_value=content_value[1].split(sep='\n')
temp_time=year+time_value[-1]
rawtime.append(temp_time)
content.append(content_value[0])
#去掉第一行的line和转换label
foriinrange(1,len(lines)):#range是左闭右开
number=int(content[i])
ifnumber==4:
label_value=1#label1表示癫痫发作
elifnumber==1:
label_value=0#label0表示数据缺失
else:
label_value=-1#label-1表示非癫痫发作
label.append(label_value)
delrawtime[0]#去掉第一行的line
length=len(lines)
returnlabel,rawtime,length
#计算时间差
defgetTimeSpan(new_label,time,length):
time_span=[]
time_label=[]
temp=datetime.strptime(time[0],"%Y-%m-%d%H:%M:%S")
foriinrange(0,length-2):
ifnew_label[i]!=new_label[i+1]:
end_time=datetime.strptime(time[i+1],"%Y-%m-%d%H:%M:%S")
diff=end_time-temp
temp=end_time
#time_span.append(diff)标准化时间
time_span.append(round(diff.total_seconds()/60,2))#保留两位小数
time_label.append(new_label[i])
returntime_span,time_label
#画图,按照标签内容给图上色
defshowTimeandLabel(time_span,time_label):
Yanse=[]
foriintime_label:
ifi==0:
yanse='blue'
elifi==-1:
yanse='gray'
else:
yanse='red'
Yanse.append(yanse)
plt.bar(range(len(time_span)),time_span,width=0.8,tick_label=time_label,color=Yanse)
plt.xlabel('标签',fontproperties=font_set)
plt.ylabel("持续时间(分钟)",fontproperties=font_set)
plt.title("patient:"+patient,size=20)
plt.ylim(0,120)
plt.show()
#保存到txt
deftxtSave(time_span,time_label):
#w:向文件中写入内容时,会先清空原文件中的内容,
withopen(filename,'w',encoding="utf-8")asf:
line_number=len(time_label)
foriinrange(line_number):
f.write(str(time_label[i])+""+str(time_span[i]))
f.write("\n")
defmain():
new_label,time,length=showLabel()
time_span,time_label=getTimeSpan(new_label,time,length)
txtSave(time_span,time_label)
showTimeandLabel(time_span,time_label)
if__name__=='__main__':
main()
到此这篇关于通过python读取txt文件和绘制柱形图的文章就介绍到这了,更多相关python绘制柱形图内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。