pyplot axis.autoscale()具有不正确的yaxis的裁剪数据

时间:2019-07-19 03:06:50

标签: python matplotlib resize axis google-colaboratory

我试图在同一张图上绘制具有不同yaxis的两条线,但是yaxis的缩放比例不足以显示完整的数据集。

我尝试使用axis.autoscale(),axis.set_ylim(),axis.axis()...,但是即使明确指定了边界,它们也无法正确设置yaxis。

from matplotlib import pyplot as plt

def plot_result(acc, val_acc, loss, val_loss=None):
    fig, (ax1) = plt.subplots(1)

    ax1.plot(acc, 'g')
    ax1.autoscale(axis='y')

    ax2 = ax1.twinx()
    ax2.plot(loss, 'r')
    if val_loss is not None: ax2.plot(val_loss, 'r--')
    ax2.autoscale(axis='y')

    fig.tight_layout()

plot_result(acc, val_acc, loss)

output graph

我希望这两行都可以覆盖整个30个纪元。 不幸的是,当我在顶部写fig, (ax1,ax2) = plt.subplots(1,2)时,它可以正确绘制(但右边有空子图)。

correct axis, but unwanted subplot

1 个答案:

答案 0 :(得分:-1)

import numpy as np
from matplotlib import pyplot as plt

acc, val_acc, loss, val_loss=np.random.rand(20),np.random.rand(20),np.random.rand(20),np.random.rand(0)

def plot_result(acc, val_acc, loss, val_loss):
    fig=plt.figure(figsize=(6,3))

    plt.subplot(1,2,1)
    plt.plot(acc)
    plt.plot(val_acc)
    plt.title('model accuracy')
    plt.ylabel('accuracy')
    plt.xlabel('epoch')
    plt.legend(['train', 'val'], loc='upper left')

    plt.subplot(1,2,2)
    plt.plot(loss)
    plt.plot(val_loss)
    plt.title('model loss')
    plt.ylabel('loss')
    plt.xlabel('epoch')
    plt.legend(['train', 'val'], loc='upper left')
    plt.show()
plot_result(acc, val_acc, loss, val_loss)

output