python学习

您所在的位置:网站首页 python数组画图日期 python学习

python学习

2023-12-04 08:08| 来源: 网络整理| 查看: 265

1.读取txt,准备数据

这里主要用到列表list的split()函数,先简单举个例子:

# 要从line字符串中提取1.598912和2.104217两个数据 line = 'step 0: dis loss 1.598912, gan loss 2.104217' temp = line.split('loss ') print(temp) t = temp[1].split(',') print(t[0]) print(temp[2])

很简单,看下运行结果就能懂。

好了,我们正式开始从文件中读取数据:

training_log.txt文件中数据格式如下,注意每行数据后多了一空行,准备数据时,新建.txt文件,将下面这部分直接复制到文件中,注意.txt文件要放在.py文件同一目录下

step 0: dis loss 1.598912, gan loss 2.104217 step 1: dis loss 0.732674, gan loss 3.946449 step 2: dis loss 0.573478, gan loss 3.388427 step 3: dis loss 0.680266, gan loss 5.132270 step 4: dis loss 0.663417, gan loss 2.586611 step 5: dis loss 0.958724, gan loss 7.208553 step 6: dis loss 0.736339, gan loss 7.141296 step 7: dis loss 0.502748, gan loss 2.121268 step 8: dis loss 1.547100, gan loss 9.549424 法1:因为数据中有空行,这里用了i来控制 filename = 'training_log.txt' step, dis, gan = [], [], [] # 相比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: if i % 2 == 0: temp = line.split('loss ') t = temp[1].split(',') step.append(j) j = j + 1 dis.append(float(t[0])) gan.append(float(temp[2])) i = i + 1 else: i = i + 1

PS:如果你的程序总是出错,那可能是你的.txt中数据的格式有问题,很可能是中间或者最后多了空行,导致出错,可以试着在上面程序的分割字符串部分加上try except语句,像这样:

try: temp = line.split('loss ') t = temp[1].split(',') except: continue 法2:如果这样做,那就不需要变量i来控制读入的行数,程序可以直接这么写(这样写容错率更高,推荐这样写) filename = 'training_log.txt' step, dis, gan = [], [], [] # 相比open(),with open()不用手动调用close()方法 with open(filename, 'r') as f: # 将txt中的数据逐行存到列表lines里 lines的每一个元素对应于txt中的一行。 # 然后将每个元素中的不同信息提取出来 lines = f.readlines() # j用于判断读了多少条,step为画图的X轴 j = 0 for line in lines: try: temp = line.split('loss ') t = temp[1].split(',') except: continue step.append(j) j = j + 1 dis.append(float(t[0])) gan.append(float(temp[2]))

数据准备完成,此时step, dis, gan三个list中存储了X,Y1,Y2的值,接下来画图

2.使用matplotlib画图 1.如果分别画两张图: from matplotlib import pyplot as plt fig = plt.figure(figsize=(10, 10)) # 创建绘图窗口,并设置窗口大小 # 画第一张图 ax1 = fig.add_subplot(211) # 将画面分割为2行1列选第一个 ax1.plot(step, dis, 'red', label='dis') # 画dis-loss的值,颜色红 ax1.legend(loc='upper right') # 绘制图例,plot()中的label值 ax1.set_xlabel('step') # 设置X轴名称 ax1.set_ylabel('Discriminator-loss') # 设置Y轴名称 # 画第二张图 ax2 = fig.add_subplot(212) # 将画面分割为2行1列选第二个 ax2.plot(step, gan, 'blue', label='gan') # 画gan-loss的值,颜色蓝 ax2.legend(loc='upper right') # loc为图例位置,设置在右上方,(右下方为lower right) ax2.set_xlabel('step') ax2.set_ylabel('Generator-loss') plt.show() # 显示绘制的图

绘制效果:

2.画在一张图中 from matplotlib import pyplot as plt plt.figure() plt.plot(step, dis, 'red', label='dis') plt.plot(step, gan, 'blue', label='gan') plt.legend() plt.show()

绘制效果:

下面放完整代码:

from matplotlib import pyplot as plt filename = 'training_log.txt' step, dis, gan = [], [], [] # 相比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: if i % 2 == 0: temp = line.split('loss ') t = temp[1].split(',') step.append(j) j = j + 1 dis.append(float(t[0])) gan.append(float(temp[2])) i = i + 1 else: i = i + 1 fig = plt.figure(figsize=(10, 5)) # 创建绘图窗口,并设置窗口大小 # 画第一张图 ax1 = fig.add_subplot(211) # 将画面分割为2行1列选第一个 ax1.plot(step, dis, 'red', label='dis') # 画dis-loss的值,颜色红 ax1.legend(loc='upper right') # 绘制图例,plot()中的label值 ax1.set_xlabel('step') # 设置X轴名称 ax1.set_ylabel('Discriminator-loss') # 设置Y轴名称 # 画第二张图 ax2 = fig.add_subplot(212) # 将画面分割为2行1列选第二个 ax2.plot(step, gan, 'blue', label='gan') # 画gan-loss的值,颜色蓝 ax2.legend(loc='upper right') # loc为图例位置,设置在右上方,(右下方为lower right) ax2.set_xlabel('step') ax2.set_ylabel('Generator-loss') plt.show() # 显示绘制的图 plt.figure() plt.plot(step, dis, 'red', label='dis') plt.plot(step, gan, 'blue', label='gan') plt.legend() plt.show()

 

参考博文:

python读取txt天气数据并使用matplotlib模块绘图

Python 绘图,我只用 Matplotlib(二)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3