【问题标题】:pyplot clipping data with incorrect yaxispyplot 用不正确的 y 轴裁剪数据
【发布时间】:2019-11-28 00:10:52
【问题描述】:

我正在尝试在同一个图上绘制两条具有不同 y 轴的线,但 y 轴的横向扩展不足以显示完整的数据集。

我尝试过使用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

【问题讨论】:

    标签: python matplotlib resize axis google-colaboratory


    【解决方案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)
    

    【讨论】:

    • 抱歉,这并不能解决问题。我已经能够通过两个子图获得正确的图。只有一个情节时会发生错误。
    猜你喜欢
    • 1970-01-01
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    相关资源
    最近更新 更多