2012-01-26 23 views
55

Próbuję zapisać działki, które robię przy użyciu matplotlib; jednak obrazy są zapisywane puste.Matplotlib (pyplot) savefig wypuszcza pusty obraz

Oto mój kod:

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) 

I tessstttyyy.png jest puste (również próbował z .jpg)

Odpowiedz

107

Po pierwsze, co się dzieje kiedy T0 is not None? Testowałem to, a następnie dostosowałem wartości, które przekazuję do plt.subplot(); może wypróbować wartości 131, 132 i 133 lub wartości zależne od tego, czy istnieje T0 czy nie.

Po drugie, po wywołaniu plt.show() tworzona jest nowa liczba. Aby poradzić sobie z tym, można

  1. połączenia plt.savefig('tessstttyyy.png', dpi=100) zanim zadzwonisz plt.show()

  2. Zapisz figurę przed wami show() wywołując plt.gcf() dla „dostać aktualną postać”, następnie możesz zadzwonić savefig() na tej Figure obiektu kiedykolwiek.

Na przykład:

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

W kodzie „tesssttyyy.png” jest puste, ponieważ zapisuje nową postać, do którego nic nie zostało wykreślone.

+0

Zapomniałeś usunąć część T0 ... to była komentowana wcześniej. – tylerthemiler

+1

Tak, usunąłem cały program i zadziałało, to ma sens ... – tylerthemiler

+1

To jest świetne, działa jak urok. – denvar

11

plt.show() powinny pochodzić po plt.savefig()

Powiązane problemy