python读取TXT文件中数据并根据数据绘制一个或多个线形图,Python求list列表的最大最小值、平均值,方差(二)

£可爱£侵袭症+ 提交于 2020-01-17 02:47:49

Python读取TXT文件绘制折线图并计算

上一节我们对time_cal.txt文件读取并在一张图上绘制折线图,那么如何分别绘制线形图呢?
在这里插入图片描述
PS:这里用到的是matplotlib库,详细的函数介绍可以参考:https://matplotlib.org/api/index.html
在这里插入图片描述
其实也很简单,话不多说,代码如下

from matplotlib import pyplot as plt
import numpy as np
fig = plt.figure(figsize=(2000, 100))  # 创建绘图窗口,并设置窗口大小
# 画第一张图
ax1 = fig.add_subplot(511)  # 将画面分割为5行1列选第一个
ax1.plot(step, imageresize, 'red', label='imager-esize')  # 画imageresize的值,颜色红
ax1.legend(loc='upper right')  # 绘制图例,plot()中的label值
ax1.set_xlabel('x')  # 设置X轴名称
ax1.set_ylabel('load image-resize')  # 设置Y轴名称

画第二张图
ax2 = fig.add_subplot(512)  # 将画面分割为5行1列选第二个
ax2.plot(step, data, 'blue', label='data')  # 画data的值,颜色蓝
ax2.legend(loc='upper right')  # loc为图例位置,设置在右上方,(右下方为lower right)
ax2.set_xlabel('x')
ax2.set_ylabel('set input data')

# 画第三张图
ax3 = fig.add_subplot(513)  # 将画面分割为5行1列选第三个
ax3.plot(step, inference, 'green', label='inference')  # 画inference的值,颜色蓝
ax3.legend(loc='upper right')  # loc为图例位置,设置在右上方,(右下方为lower right)
ax3.set_xlabel('x')
ax3.set_ylabel('inference')

# 画第四张图
ax4 = fig.add_subplot(514)  
ax4.plot(step, getOut , 'yellow', label='getOut')  # 画getOut的值,颜色黄
ax4.legend(loc='upper right')  # loc为图例位置,设置在右上方,(右下方为lower right)
ax4.set_xlabel('x')
ax4.set_ylabel('getout')

# 画第五张图
ax5 = fig.add_subplot(515)  # 将画面分割为5行1列选第五个
ax5.plot(step, final , 'darkgray', label='final')  # 画final的值,颜色深灰
ax5.legend(loc='upper right')  # loc为图例位置,设置在右上方,(右下方为lower right)
ax5.set_xlabel('x')
ax5.set_ylabel('final')
plt.show()  # 最后显示绘制的图

画出的图如下,可以看出明显的波动
在这里插入图片描述
最后是分别计算最大值,最小值,平均值,方差和标准差

print("名称 最大值 最小值 平均值 方差 标准差")
imageresize = np.array(imageresize)#imageresize是list,转为arr可以直接调用max()求最大值,min()最小值,mean()平均值,var()方差,std()标准差
print("imageresize: ",imageresize.max(),imageresize.min(),imageresize.mean(),imageresize.var(),imageresize.std())

data = np.array(data)
print("data: ", data.max(),data.min(),data.mean(),data.var(),data.std())

inference = np.array(inference)
print("inference: ",inference.max(),inference.min(),inference.mean(),inference.var(),inference.std())

getOut = np.array(getOut)
print("getOut: ", getOut.max(),getOut.min(),getOut.mean(),getOut.var(),getOut.std())

final = np.array(final)
print("final: ",final.max(),final.min(),final.mean(),final.var(),final.std())

我是为了方便讲计算结果直接输出,可以新建一个表格将结果复制进去,打开后按空格分列就可以得到如下直观的列表啦!
在这里插入图片描述

最后的最后,整体代码如下

from matplotlib import pyplot as plt
import numpy as np
filename = 'time_cal.txt'
step, imageresize, data, inference, getOut, final = [], [], [], [], [], []
# 相比open(),with open()不用手动调用close()方法
with open(filename, 'r') as f:
    # 将txt中的数据逐行存到列表lines里 lines的每一个元素对应于txt中的一行。然后将每个元素中的不同信息提取出来
    lines = f.readlines()
    # i变量,由于这个txt存储时有空行,所以增只读偶数行,主要看txt文件的格式,一般不需要
    # j用于判断读了多少条,step为画图的X轴
    i = 0
    j = 0
    for line in lines:
        temp = line.split(' ')
        t1 = temp[1].split(':')
        t2 = temp[4].split(':')
        t3 = temp[5].split(':')
        t4 = temp[6].split(':')
        t5 = temp[7].split(':')

        step.append(j)
        j = j + 1
        imageresize.append(float(t1[1].strip('ms')))
        data.append(float(t2[1].strip('ms')))
        inference.append(float(t3[1].strip('ms')))
        getOut.append(float(t4[1].strip('ms')))
        final.append(float(t5[1].strip('ms\n')))
#绘制在一张表格
plt.figure()
plt.plot(step, imageresize, 'red', label='image-resize')
plt.plot(step, data, 'blue', label='data')
plt.plot(step, inference, 'yellow', label='inference')
plt.plot(step, getOut, 'green', label='getOut')
plt.plot(step, final, 'darkgray', label='final')
plt.legend()
plt.show()

#分开绘制
fig = plt.figure(figsize=(2000, 100))  # 创建绘图窗口,并设置窗口大小
# 画第一张图
ax1 = fig.add_subplot(511) 
ax1.plot(step, imageresize, 'red', label='imager-esize')  # 画dis-loss的值,颜色红
ax1.legend(loc='upper right')  # 绘制图例,plot()中的label值
ax1.set_xlabel('x')  # 设置X轴名称
ax1.set_ylabel('load image-resize')  # 设置Y轴名称
# 画第二张图
ax2 = fig.add_subplot(512) 
ax2.plot(step, data, 'blue', label='data')  # 画gan-loss的值,颜色蓝
ax2.legend(loc='upper right')  # loc为图例位置,设置在右上方,(右下方为lower right)
ax2.set_xlabel('x')
ax2.set_ylabel('set input data')
# 画第三张图
ax3 = fig.add_subplot(513) 
ax3.plot(step, inference, 'green', label='inference')  # 画gan-loss的值,颜色蓝
ax3.legend(loc='upper right')  # loc为图例位置,设置在右上方,(右下方为lower right)
ax3.set_xlabel('x')
ax3.set_ylabel('inference')
# 画第四张图
ax4 = fig.add_subplot(514)  
ax4.plot(step, getOut , 'yellow', label='getOut')  # 画gan-loss的值,颜色黄
ax4.legend(loc='upper right')  # loc为图例位置,设置在右上方,(右下方为lower right)
ax4.set_xlabel('x')
ax4.set_ylabel('getout')
# 画第五张图
ax5 = fig.add_subplot(515) 
ax5.plot(step, final , 'darkgray', label='final')  # 画gan-loss的值,颜色深灰
ax5.legend(loc='upper right')  # loc为图例位置,设置在右上方,(右下方为lower right)
ax5.set_xlabel('x')
ax5.set_ylabel('final')

plt.show()  # 最后显示绘制的图

#计算
print("名称 最大值 最小值 平均值 方差 标准差")
imageresize = np.array(imageresize)
print("imageresize: ",imageresize.max(),imageresize.min(),imageresize.mean(),imageresize.var(),imageresize.std())

data = np.array(data)
print("data: ", data.max(),data.min(),data.mean(),data.var(),data.std())

inference = np.array(inference)
print("inference: ",inference.max(),inference.min(),inference.mean(),inference.var(),inference.std())

getOut = np.array(getOut)
print("getOut: ", getOut.max(),getOut.min(),getOut.mean(),getOut.var(),getOut.std())

final = np.array(final)
print("final: ",final.max(),final.min(),final.mean(),final.var(),final.std())

初次接触的小菜鸟,还在学习当中,希望对你有帮助,哪里有问题希望大佬指正!!!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!