2013-01-31 16 views
5

Mam pytanie, nie jestem pewien, czy jest to trudne, czy nie, ale starałem się google odpowiedź. nic nie warte.Ukryj/niewidoczne Matplotlib rysunek

Mam postać globalną, do której można uzyskać dostęp we wszystkich wątkach.

ale wydaje się na początku programu,

Chcę, aby ukryć lub czyni go niewidzialnym w rozruchu skryptu następnie w pewnym momencie w kodzie udostępnić go lub widoczne.

Czy istnieje jakikolwiek matplotlib jak widać fałsz lub coś

używam to:

plt.ion() 

fig = plt.figure(visible=False) 

ax =fig.add_subplot(111) 

góry dziękuję

Odpowiedz

1

Idealnie unikać plt.ion() w skryptach. Jest przeznaczony do użycia tylko w sesjach interaktywnych, w których chcesz natychmiast zobaczyć wynik poleceń matplotlib.

W skrypcie, rysunek jest zwykle opóźniony aż plt.show nazywa się:

import matplotlib.pyplot as plt 

fig = plt.figure() 
ax = fig.add_subplot(111) 

ax.plot(range(5)) 

plt.show() # now the figure is shown 
+0

Dziękuję Rozwiązałem go daleko, że ja go zainicjować tylko po raz pierwszy przez flagi, ale jeśli nie używać jon, ja nie widzę żadnych zmiany na obrazie – Hasan

1

muszę zrobić to samo, co prosisz, ale mogę umieścić rysunek na płótnie najpierw za pomocą tego proces (UWAGA: ta wykorzystuje matplotlib, pyplot i wxPython):

#Define import and simplify how things are called 
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas 
import matplotlib.pyplot as plt 

#Make a panel 
panel = wx.Panel(self) 

#Make a figure 
self.figure = plt.figure("Name") 
#The "Name" is not necessary, but can be useful if you have lots of plots 

#Make a canvas 
self.canvas = FigureCanvas(panel, -1, self.figure) 

#Then use 
self.canvas.Show(True) 
#or 
self.canvas.Show(False) 

#You can also check the state of the canvas using (probably with an if statement) 
self.canvas.IsShown() 
0

W przypadku, gdy chcesz ukryć całe okno wykresu, a używasz backend tk - można użyć Toplevel() widżet przeprowadzoną biblioteka tkinterów.

Oto pełny przykład:

from tkinter import * 
import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg 

fig,(ax) = plt.subplots() 
x = np.linspace(0, 2 * np.pi) 
y = np.transpose([np.sin(x)]) 
ax.plot(y) 

graph = Toplevel() 
canvas = FigureCanvasTkAgg(fig, master=graph) 
canvas.get_tk_widget().pack() 
canvas.show() 

toolbar = NavigationToolbar2TkAgg(canvas, graph) 
toolbar.update() 

numerem:

graph.withdraw() 

ukryje okno fabuła, oraz:

graph.deiconify() 

będzie go wyświetlić ponownie.

+0

Nikt nie pytał o Tkintera tutaj. – ImportanceOfBeingErnest

+0

@ImportanceOfBeingErnest Oczywiście, ale to się załatwia. Dlaczego nie powinno się tego robić w ten sposób? – Tjaart

+0

To jest bardzo specyficzne rozwiązanie backendu, a ponieważ backend tk nie jest standardowym backendem, odpowiedź przynajmniej musi wspomnieć o tym fakcie. Dodatkowo, jest to dość przesadne, ponieważ możesz po prostu użyć 'fig.set_visible (False)' (jak widać w [tej odpowiedzi] (http://stackoverflow.com/a/32576093/4124317)). – ImportanceOfBeingErnest

0

Istnieje nice answer sposób przełączania widoczności kompletnej figury matplotlib w this question. Chodzi o to, aby użyć metody .set_visible rysunku.

Oto kompletny przykład:

import matplotlib.pyplot as plt 

plt.scatter([1,2,3], [2,3,1], s=40) 

def toggle_plot(event): 
    # This function is called by a keypress to hide/show the figure 
    plt.gcf().set_visible(not plt.gcf().get_visible()) 
    plt.draw() 

cid = plt.gcf().canvas.mpl_connect("key_press_event", toggle_plot) 

plt.show()