• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    通过python读取txt文件和绘制柱形图的实现代码

    目的

    临床数据的记录时间对应标签(逗号后面的数字)记录在txt文件里,要把标签转换为3类标签,并且计算出每个标签的分别持续时间,然后绘制成柱形图方便查阅。

    小难点分析:

    (1)txt的切割读取对应内容  

     (2)时间差计算

    txt文件如图:

    使用效果

    首先将原始txt转换为  左列新标签 右列持续时间

    绘制为柱形图

    为了直观,每次只最多显示 2个小时,同时横坐标还是按照临床的记录时间顺序。

    代码实现

    # -*- coding: utf-8 -*-
     
    from datetime import datetime
    import matplotlib.pyplot as plt
    from matplotlib.font_manager import FontProperties
     
    font_set = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=12)
    address = "D:/XXXXXX/"
    patient = "XXXXX"
    year = '2020' # or 2020
    txt_address = address + patient + "/timetable.txt"
    filename = address + patient + "/newTimeTable.txt" # 保存的txt地址
     
    # 读取txt的相应内容
    def showLabel():
      content = []
      label = []
      rawtime = []
     
      with open(txt_address, 'r', encoding="utf-8") as f:
        lines = f.readlines() # 返回的是列表
     
      print("文件的行数:%d" % len(lines))
     
      for line in lines:
        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
      for i in range(1, len(lines)): # range是左闭右开
        number = int(content[i])
        if number == 4:
          label_value = 1 # label 1 表示癫痫发作
        elif number == 1:
          label_value = 0 # label 0 表示数据缺失
        else:
          label_value = -1 # label -1 表示非癫痫发作
        label.append(label_value)
     
      del rawtime[0] # 去掉第一行的line
      length = len(lines)
      return label, rawtime, length
     
    # 计算时间差
    def getTimeSpan(new_label,time,length):
      time_span = []
      time_label = []
      temp = datetime.strptime(time[0], "%Y-%m-%d  %H:%M:%S")
      for i in range(0, length - 2):
        if new_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])
     
      return time_span, time_label
     
    # 画图,按照标签内容给图上色
    def showTimeandLabel(time_span,time_label):
      Yanse = []
      for i in time_label:
        if i == 0:
          yanse = 'blue'
        elif i == -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
    def txtSave(time_span, time_label):
      # w:向文件中写入内容时,会先清空原文件中的内容,
      with open(filename, 'w', encoding="utf-8") as f:
        line_number = len(time_label)
        for i in range(line_number):
          f.write(str(time_label[i])+"              "+str(time_span[i]))
          f.write("\n")
    
    def main():
      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绘制柱形图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • 如何用Python绘制3D柱形图
    • Python绘图之柱形图绘制详解
    • python绘制双柱形图代码实例
    • Python使用bar绘制堆积/带误差棒柱形图的实现
    上一篇:Python安装配置OpenGL环境的全过程记录
    下一篇:一文秒懂Python中的字符串
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    通过python读取txt文件和绘制柱形图的实现代码 通过,python,读取,txt,文件,