python加载文件数据并画图_python学习——读取txt文件数据并画图-Go语言中文社区...

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])

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

20190728211803722.png

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

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() # 显示绘制的图

绘制效果:

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM1MDc3MTA3,size_16,color_FFFFFF,t_70

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()

绘制效果:

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM1MDc3MTA3,size_16,color_FFFFFF,t_70

下面放完整代码:

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()

参考博文:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值