2016-02-16 9 views
5

Chcę utworzyć wykres z funkcją, zwróci on rys, więc później mogę go ponownie wyświetlić w razie potrzeby.Matplotlib: zdefiniowana przez użytkownika funkcja wydruku wydrukuj dwukrotnie

Funkcja idzie tak:

def simple_plot(ax = None): 
    if ax is None: 
     fig, ax = plt.subplots() 
    a = [1,2,3,4] 
    b = [3,4,5,6] 
    plt.plot(a, b,'-', color='black') 
    return fig 

Jeśli biegnę simple_plot(), byłoby wydrukować wykres dwukrotnie, podobnie jak to:

enter image description here

Wskazówka: jeśli biegnę fig = simple_plot(), to będzie wydrukuj tylko raz i mogę użyć fig do odtworzenia wykresu później w Ipython Notebook

  1. Jak mogę go wydrukować tylko raz, jeśli uruchomię simple_plot()?

  2. Nie jestem pewien, czy poprawnie zdefiniowałem funkcję, jaki byłby dobry sposób na zdefiniowanie funkcji tworzenia wykresu?

+0

Twój problem nie jest zbyt jasny, czy możesz przeczytać i spróbować rozwiązać niektóre problemy? – Jezzamon

+0

@Jezzamon, Mam zaktualizować moje pytanie, proszę zobaczyć to jeszcze raz, dzięki. – cqcn1991

Odpowiedz

5

Jest to efektem ubocznym funkcji automatycznego wyświetlania z Jupyter komputerów przenośnych. Za każdym razem, gdy wywołasz plt.plot(), uruchamia wyświetlanie wykresu. Ale także, gdy obiekt figurki jest odwoływany jako ostatnia instrukcja komórki, uruchamiany jest inny wyświetlacz. Ten ostatni ekran nie jest wyzwalany, gdy ostatnia instrukcja w komórce jest przypisana (fig = simple_plot()), a zatem nie widać drugiego wykresu.

Aby zapobiec wyświetlaniu drugiego wykresu (lub automatycznego wyświetlania dowolnego odniesienia surowego), wystarczy dodać średnik na końcu ostatniej instrukcji w komórce. Na przykład. wywołanie simple_plot(); wyświetli tylko jeden wykres.

+0

To wydaje się bardzo niewygodne dla osób piszących pakiety, które produkują niestandardowe wykresy. Czy nie ma sposobu, aby napisać funkcję, która zwraca działkę, ale nie wymaga niezwykłego zachowania użytkownika, aby uniknąć duplikowania fabuły? – cge

0

Wyjmij return

ipython Notebook knuje raz podczas wykonywania plt.plot(a, b,'-', color='black') i drugi raz po powrocie swój obiekt fig do konsoli.

Równie dobrze można zachować instrukcję return, ale zapisać zwróconą wartość w zmiennej i wydrukować ją ponownie, wykonując po prostu fig.

enter image description here

+0

Oznacza to, że nie mogę uruchomić 'simple_plot()'? Przypisanie zmiennej 'fig = simple_plot()' jest dość niepotrzebne, gdy nie potrzebuję 'fig'. – cqcn1991

+0

Możesz, ale nie chcesz, aby zwrotna instrukcja, ponieważ spowoduje to podwójny wykres (lub możesz dodać średnik, jak sugeruje odpowiedź jonnata). – gsmafra

Powiązane problemy