Jupyter | Как использовать matplotlib для построения нескольких строк только на одном графике в цикле for и сохранения предыдущих строк?

#python #matplotlib #plot #jupyter-notebook

Вопрос:

Я пытаюсь построить 5 строк на графике в цикле for. На каждой итерации значения x и y добавляются в np.массив, а затем наносятся на рисунок. Проблема, с которой я сталкиваюсь, заключается в том, что я хочу, чтобы все линии на одном графике, так как их значения x всегда одинаковы, но значения y будут меняться.

Вот как я это делаю:

 for i in range (0,5):
    for epoch in range(0, num_epochs):
        x = np.append(x,epoch)
        y = np.append(y,accuracy)
        z = np.append(z, running_loss/j)

    fig, axs = plt.subplots(2)
    fig.suptitle('Model Evlauation')
    axs[0].plot(x, y)
    axs[1].plot(x, z)
    axs[0].set_xlabel('Number of epochs')
    axs[1].set_xlabel('Number of epochs')
    axs[0].set_ylabel('Accuracy')
    axs[1].set_ylabel('Loss')
    fig.tight_layout(pad=2)
    plt.show()
 

таким образом, я получаю 5 разных фигур, и каждая из них включает только одну строку:
введите описание изображения здесь

в то время как я хочу что-то вроде следующего рисунка: введите описание изображения здесь

Ответ №1:

Когда вы помещаете подзаголовки в цикл for, он каждый раз устанавливается заново. Так что вместо этого вы хотите:

 fig, axs = plt.subplots(2)
for i in range (0,5):
    for epoch in range(0, num_epochs):
        x = np.append(x,epoch)
        y = np.append(y,accuracy)
        z = np.append(z, running_loss/j)
    axs[0].plot(x, y)
    axs[1].plot(x, z)
fig.suptitle('Model Evlauation')
axs[0].set_xlabel('Number of epochs')
axs[1].set_xlabel('Number of epochs')
axs[0].set_ylabel('Accuracy')
axs[1].set_ylabel('Loss')
fig.tight_layout(pad=2)
plt.show()
 

Комментарии:

1. Нет проблем! Я помню, что мне потребовалось некоторое время, прежде чем я понял подзаголовки и другие подобные вещи!