matplotlib Savefig输出空白图像

dwbf0jvd  于 2023-05-23  发布在  其他
关注(0)|答案(5)|浏览(217)

我试图保存我使用matplotlib绘制的图;但是,图像保存为空白。
下面是我的代码:

plt.subplot(121)
plt.imshow(dataStack, cmap=mpl.cm.bone)

plt.subplot(122)
y = copy.deepcopy(tumorStack)
y = np.ma.masked_where(y == 0, y)

plt.imshow(dataStack, cmap=mpl.cm.bone)
plt.imshow(y, cmap=mpl.cm.jet_r, interpolation='nearest')

if T0 is not None:
    plt.subplot(123)
    plt.imshow(T0, cmap=mpl.cm.bone)

    #plt.subplot(124)
    #Autozoom

#else:
    #plt.subplot(124)
    #Autozoom

plt.show()
plt.draw()
plt.savefig('tessstttyyy.png', dpi=100)

tessstttyy.png为空白(也尝试使用.jpg)

vcudknz3

vcudknz31#

首先,当T0 is not None时会发生什么?我会测试它,然后我会调整我传递给plt.subplot()的值;可以尝试值131、132和133,或者取决于T0是否存在的值。
其次,在调用plt.show()之后,创建一个新的图形。要处理这个问题,你可以
1.在调用plt.show()之前调用plt.savefig('tessstttyyy.png', dpi=100)
1.通过调用plt.gcf()来保存show()之前的图形“获取当前图形”,然后您可以随时在这个Figure对象上调用savefig()
例如:

fig1 = plt.gcf()
plt.show()
plt.draw()
fig1.savefig('tessstttyyy.png', dpi=100)

在您的代码中,'tesssttyyy.png'为空,因为它正在保存新图形,而没有绘制任何图形。

uhry853o

uhry853o2#

plt.show()应在plt.savefig()之后
说明:plt.show()清除了整个事件,因此之后的任何操作都将发生在一个新的空图形上

zf2sa74q

zf2sa74q3#

改变函数的顺序为我解决了问题

*保存情节
*然后显示情节

如下:

plt.savefig('heatmap.png')

plt.show()
kxe2p93d

kxe2p93d4#

在show()之前调用savefig对我很有用。

fig ,ax = plt.subplots(figsize = (4,4))
sns.barplot(x='sex', y='tip', color='g', ax=ax,data=tips)
sns.barplot(x='sex', y='tip', color='b', ax=ax,data=tips)
ax.legend(['Male','Female'], facecolor='w')

plt.savefig('figure.png')
plt.show()
k7fdbhmy

k7fdbhmy5#

让我给予一个更详细示例:

import numpy as np
import matplotlib.pyplot as plt

def draw_result(lst_iter, lst_loss, lst_acc, title):
    plt.plot(lst_iter, lst_loss, '-b', label='loss')
    plt.plot(lst_iter, lst_acc, '-r', label='accuracy')

    plt.xlabel("n iteration")
    plt.legend(loc='upper left')
    plt.title(title)
    plt.savefig(title+".png")  # should before plt.show method

    plt.show()

def test_draw():
    lst_iter = range(100)
    lst_loss = [0.01 * i + 0.01 * i ** 2 for i in xrange(100)]
    # lst_loss = np.random.randn(1, 100).reshape((100, ))
    lst_acc = [0.01 * i - 0.01 * i ** 2 for i in xrange(100)]
    # lst_acc = np.random.randn(1, 100).reshape((100, ))
    draw_result(lst_iter, lst_loss, lst_acc, "sgd_method")

if __name__ == '__main__':
    test_draw()

相关问题