欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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")
相关标签: 常用工具