0

我正在尝试生成两个不同的图形来分隔使用相同基本数据的文件(.png 图像),但我得到了空白的白色图像。但是,当在带有 plt.show() 语句的 jupyter 笔记本中显示时,这两个数字似乎都不错。我的相关代码如下所示:

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() 不产生正确的输出,即使下面的 show() 语句产生正确的输出到 jupyter notebook 内的浏览器。

我也尝试过 variablefig1而不是plt.gcf().

有什么建议么?

4

1 回答 1

0

感谢@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()

此外,最后一个绘图命令中有一个错字(应该绘制 fit2 而不是 fit1)在“伪造”帖子的代码时引入。

它现在正确显示并保存数字。但是,我仍然 UserWarning: Matplotlib is currently using module://ipykernel.pylab.backend_inline, which is a non-GUI backend, so cannot show the figure.在 jupyter notebook 中收到警告。因此,如果你们中的任何一个对此有任何见解,请添加评论以确保完整性。

于 2020-04-22T14:07:29.300 回答