Сохранение нескольких рисунков в отдельных файлах не работает, даже если они правильно отображают () - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь создать две разные фигуры для разделения файлов (.png изображений), которые используют одни и те же базовые данные c, но я получаю пустые белые изображения. Тем не менее, обе цифры выглядят нормально, если они показаны в блокноте jupyter с оператором plt.show (). Мой соответствующий код выглядит так:

plt.figure(1)
fig1, axs1 = plt.subplots(2,2)
plt.figure(2)
fig2, axs2 = plt.subplots(2,2)

# generate 4 datasets in a for loop
for i in range(4): 
    x,y = createRandomData(parameters)
    fit1 = doFit1(x,y)
    plt.figure(1)
    axs1[i//2,i%2].plot(x,y,color='black',linewidth = 1)
    axs1[i//2,i%2].plot(x,fit1,color='green',linewidth = 1)
    fit2 = doFit2(x,y)
    plt.figure(2)
    axs2[i//2,i%2].plot(x,y,color='black',linewidth = 1)
    axs2[i//2,i%2].plot(x,fit1,color='green',linewidth = 1)
plt.figure(1)
plt.gcf().set_size_inches(12,8)
plt.gcf().savefig('dataWithFit1.png', dpi=200)
plt.show()
plt.figure(2)
plt.gcf().set_size_inches(12,8)
plt.gcf().savefig('dataWithFit2.png', dpi=200)
plt.show()

Не могу понять, почему savefig () не выдает corrent-вывод, даже если следующие операторы show () выдают корректный вывод в браузер внутри ноутбука jupyter.

Я также пробовал переменную fig1 вместо plt.gcf().

Есть предложения?

1 Ответ

0 голосов
/ 22 апреля 2020

Благодаря комментарию @ Patol75, я изменил код на:

fig1, axs1 = plt.subplots(2,2)
fig2, axs2 = plt.subplots(2,2)

# generate 4 datasets in a for loop
for i in range(4): 
    x,y = createRandomData(parameters)
    fit1 = doFit1(x,y)
    axs1[i//2,i%2].plot(x,y,color='black',linewidth = 1)
    axs1[i//2,i%2].plot(x,fit1,color='green',linewidth = 1)
    fit2 = doFit2(x,y)
    axs2[i//2,i%2].plot(x,y,color='black',linewidth = 1)
    axs2[i//2,i%2].plot(x,fit2,color='green',linewidth = 1)
fig1.set_size_inches(12,8)
fig1.savefig('dataWithFit1.png', dpi=200)
fig1.show()
fig2.set_size_inches(12,8)
fig2.savefig('dataWithFit2.png', dpi=200)
plt.show()

Также в последней команде plot была опечатка (должна отображать fit2 вместо fit1), введенную при «псевдофинировании» код для сообщения.

Теперь он показывает и сохраняет цифры правильно. Тем не менее, я все еще получаю предупреждение UserWarning: Matplotlib is currently using module://ipykernel.pylab.backend_inline, which is a non-GUI backend, so cannot show the figure. в ноутбуке Jupyter. Итак, если кто-то из вас имеет какое-либо представление об этом, пожалуйста, добавьте комментарий для полноты.

...