matplotlib 画折线图

有三组数据,共用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(loc=2) # 2:左上,1:右上。默认1
    # plt.grid(True)  # 画网格线
    # 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")
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值