matplotlib 画折线图
程序员文章站
2022-03-04 15:00:36
...
有三组数据,共用x轴。两组量纲相同,使用左侧纵轴刻度,第三组量纲不同,使用右侧Y轴刻度。
import numpy as np
from numpy import genfromtxt
import matplotlib.pyplot as plt
f_avg = 'loss_avg.txt'
f_los = 'loss_verify.txt'
f_err = 'loss_error_verify.txt'
f_out = 'pic.loss.png'
data_avg = genfromtxt(f_avg)
data_los = genfromtxt(f_los)
data_err = genfromtxt(f_err)
size = data_avg.shape[0]
x = range(size)
max_1 = max(data_avg.max(), data_los.max()) # loss最大值
max_2 = data_err.max() # loss最大值
plt.switch_backend('agg')
# 两个数据一起画
def plot_oneY():
plt.ylim(0, max(data_avg.max(), data_los.max()) + 1) # 设置y轴范围
plt.plot(x, data_avg, label='loss_avg')
plt.plot(x, data_los, label='loss_verify')
plt.xticks(range(0, size, size//10)) # 设置x轴显示间隔
plt.margins(0) # 图像与坐标轴线不留空
plt.subplots_adjust(bottom=0.15) # 调节底部空白
plt.title("losses")
plt.xlabel("epochs")
plt.ylabel("loss")
plt.legend()
# plt.show()
fig = plt.gcf()
fig.set_size_inches(12, 9)
fig.savefig('pic.loss.png', dpi=100)
#第三组数据量纲不同,使用右侧Y轴
def plot_twoY():
fig = plt.figure()
# 第一组,y轴在左
ax1 = fig.add_subplot(111)
ax1.plot(x, data_avg, label='loss_avg')
ax1.plot(x, data_los, label='loss_verify')
ax1.set_ylabel('loss value')
ax1.set_ylim(0, 1.1*max_1) # 设置y轴范围
plt.legend(loc=1) # 设置图例在右上角
# 第二组,y轴在右
ax2 = ax1.twinx()
ax2.plot(x, data_err, 'y-', alpha=0.5, label='error_verify')
ax2.set_ylabel('error rate(%)')
ax2.set_ylim(0, min(100, 1.1*max_2)) # 设置y轴范围
plt.legend(loc=4) # 设置图例在右下
plt.title("train curve")
plt.xlabel("epochs")
plt.xticks(range(0, size, size//10)) # 设置x轴显示间隔
plt.margins(0) # 图像与坐标轴线不留空
plt.subplots_adjust(bottom=0.15) # 调节底部空白
fig = plt.gcf()
fig.set_size_inches(12, 9)
fig.savefig(f_out, dpi=100)
plot_twoY()
print ("ok")
上一篇: 适用于高并发的本地缓存方案
下一篇: Mysql的复合索引如何生效