• python读取.txt文件中某些关键字后面的内容 并根据该数据画图


    感谢一下悦姐帮忙

    1. import re
    2. #先把文件读进来,用read读入的是字符串,readlines是list
    3. with open('resok.txt') as f:
    4. txt = f.read()
    5. dataset = r'5low:.*|5mix:.*|5normal:.*'
    6. para = r'MAE: (.{6})'#意思是MAE: 后面的六个东西
    7. row_data = re.findall(dataset,txt)#正则化找到要读的内容,先找到基本的行(dataset),在找到行里的内容(para)
    8. new_row_data = '\n'.join(row_data)#list转化为字符串
    9. final_data = re.findall(para,new_row_data)
    10. # print(dataset)
    11. # print('\n')
    12. # print(new_row_data)
    13. # print('\n')
    14. # print(final_data)
    15. print(len(final_data))#检查一下个数看对不对

    然后画图,其实两个代码可以放在一个里面

    1. import matplotlib
    2. import matplotlib.pyplot as plt
    3. import numpy as np
    4. from readdata import final_data
    5. #要画的标签以及每个标签对应的值
    6. labels = [ 'CONet', 'DANet','DCF', 'SP-Net', 'VST', 'CDINet','DFM-Net','TriTransNet','cmSalGAN','D3Net','BiANet','DLMNet','CCAFNet','C2DFNet','MobileSal','JL-DCF','SwinNet','A2S-v2','HRTransNet']
    7. Overall = []
    8. low = []
    9. normal = []
    10. #print(final_data)
    11. #把之前读进来的数据分给上面的对应的值
    12. for i in range(len(final_data)):
    13. final_data[i]=float(final_data[i])
    14. if i % 3 == 0:
    15. low.append(final_data[i])
    16. if i % 3 == 1:
    17. Overall.append(final_data[i])
    18. if i % 3 == 2:
    19. normal.append(final_data[i])
    20. # print(Large)
    21. # print('\n')
    22. # print(Middle)
    23. # print('\n')
    24. # print(Overall)
    25. # print('\n')
    26. # print(Small)
    27. # print('\n')
    28. x = np.arange(len(labels)) # 标签位置
    29. width = 0.2 # 柱状图的宽度,可以根据自己的需求和审美来改
    30. fig, ax = plt.subplots()
    31. rects1 = ax.bar(x - width, low, width, label='Low-light scenes',color=(33/255,158/255,188/255))
    32. rects2 = ax.bar(x + 0.00, normal, width, label='Sunny scenes',color=(19/255,103/255,131/255))
    33. rects3 = ax.bar(x + width, Overall, width, label='Overall',color=(2/255,48/255,74/255))
    34. #为y轴、标题和x轴等添加一些文本。
    35. # ax.set_ylabel(r'$F^{\omega}_{\beta}$', fontsize=12)
    36. # ax.set_xlabel('Models', fontsize=12)
    37. # ax.set_title('Result of 'r'$F^{\omega}_{\beta}$')
    38. # ax.set_xticks(x)
    39. # ax.set_xticklabels(labels,rotation=45)
    40. # ax.set_ylim(0.4,1.1)
    41. # ax.legend(loc='upper right')
    42. ax.set_ylabel('MAE', fontsize=12)
    43. ax.set_xlabel('Models', fontsize=12)
    44. ax.set_title('Result of MAE')
    45. ax.set_xticks(x)
    46. ax.set_xticklabels(labels,rotation=45)
    47. #可以自己控制
    48. #轴的显示范围
    49. #ax.set_ylim(0,0.24)
    50. ax.legend(loc='upper right')
    51. # def autolabel(rects):
    52. # """在*rects*中的每个柱状条上方附加一个文本标签,显示其高度"""
    53. # for rect in rects:
    54. # height = rect.get_height()
    55. # ax.annotate('{}'.format(height),
    56. # xy=(rect.get_x() + rect.get_width() / 2, height),
    57. # xytext=(0, 3), # 3点垂直偏移
    58. # textcoords="offset points",
    59. # ha='center', va='bottom')
    60. # autolabel(rects1)
    61. # autolabel(rects2)
    62. # autolabel(rects3)
    63. # autolabel(rects4)
    64. #fig.tight_layout()
    65. #plt.xticks(labels, labels, rotation=30)
    66. plt.show()

    最后贴个图:

  • 相关阅读:
    arm交叉编译ntpdate与服务器进行时间同步
    【鸿蒙(HarmonyOS)】UI开发的两种范式:ArkTS、JS(以登录界面开发为例进行对比)
    CSS面试题---基础
    研究生综合英语上第五单元
    Linux 安装
    不重复数字
    记录一下自行安装RabbitMQ的步骤
    客户案例 | 低代码上的西门子,个性化业务应用遍地开花
    Linux -- 进阶 Web服务器 搭建基于 https 协议的静态网站 ( 预备知识 )
    054_末晨曦Vue技术_处理边界情况之组件之间的循环引用
  • 原文地址:https://blog.csdn.net/wacebb/article/details/132744182