source

Savefig 출력 빈 이미지

ittop 2023. 7. 6. 22:35
반응형

Savefig 출력 빈 이미지

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)

그리고 tesssttyyy.png이 비어 있습니다(.jpg로도 시도됨).

첫째, 다음과 같은 경우에 발생합니다.T0 is not None저는 그것을 테스트하고, 제가 전달하는 값을 조정할 것입니다.plt.subplot()아마도 131, 132, 133 값을 시도하거나, 또는 그것의 여부에 따라 달라지는 값을 시도할 수 있습니다.T0존재한다.

둘째, 다음plt.show()이 호출되면 새 그림이 생성됩니다.이 문제를 해결하기 위해, 당신은

  1. 불러plt.savefig('tessstttyyy.png', dpi=100)전화하기 전에plt.show()

  2. 그림을 저장합니다.show()전화로plt.gcf()"현재 수치 가져오기"에 대해 전화할 수 있습니다.savefig()이에 대하여Figure언제든지 반대합니다.

예:

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

코드에서 'tesstyyy.png'은 아무것도 플롯되지 않은 새 도형을 저장하기 때문에 비어 있습니다.

plt.show()다음에 와야 합니다.plt.savefig()

설명:plt.show()모든 것을 클리어하기 때문에 이후에 새로운 빈 도형에서 어떤 일이 발생할 것입니다.

문제를 해결한 함수의 순서를 변경합니다.

  • 먼저 플롯 저장
  • 그런 다음 그림 표시

다음과 같이:

plt.savefig('heatmap.png')

plt.show()

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()

좀 더 자세한 예를 들어 보겠습니다.

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()

enter image description here

언급URL : https://stackoverflow.com/questions/9012487/savefig-outputs-blank-image

반응형