2012-10-15 16 views
8

Szukałem sposobu, aby móc wybrać, które serie są widoczne na wykresie, po utworzeniu wykresu.Interaktywna selekcja serii na matplotlib plot

Potrzebuję tego, ponieważ często mam działki z wieloma seriami. oni są zbyt liczni, aby tworzyć fabułę w tym samym czasie i muszę szybko i interaktywnie wybrać, które serie są widoczne. Idealnie byłoby okno z listą serii na działce i polach wyboru, gdzie widoczna jest seria z zaznaczonym polem wyboru.

Czy ktoś wie, czy zostało to już gdzieś zaimplementowane ?, jeśli nie, to czy ktoś może mnie poprowadzić w jaki sposób mogę zrobić to sam?

Dzięki!

Omar

Odpowiedz

8

Wszystko zależy od tego, jak wiele wysiłku jesteś gotów zrobić i co Dokładne wymagania są, ale możesz się założyć, że zostało już gdzieś zaimplementowane :-)

Jeśli celem jest głównie nie zaśmiecanie obrazu, może wystarczyć użycie wbudowanych możliwości; można znaleźć odpowiedniego kodu w bibliotece przykładów matplotlib:

Jeśli naprawdę chcesz mieć interfejs, dzięki czemu można pilnować wydajność poprzez ograniczenie ilości działek/danych, zazwyczaj korzystasz z zestawu narzędzi GUI, takiego jak GTK, QT lub WX. Spójrz na niektóre artykuły i przykładowy kod:

2

się lista wyboru będzie w porządku, jeśli masz kilka działek lub mniej, ale więcej działek menu podręczne będzie prawdopodobnie lepiej. Nie jestem pewien, czy któryś z nich jest możliwy z matplotlib.

Sposób, w jaki to zaimplementowałem, polegał na użyciu suwaka do wybrania wykresu z listy - wystarczy użyć suwaka, aby ustawić indeks serii, która ma zostać pokazana. Miałem kilkaset serii na zbiór danych, więc był to dobry sposób na szybkie sprawdzenie ich.

Mój kod do ustawiania tego było mniej więcej tak:

fig = pyplot.figure() 
slax = self.fig.add_axes((0.1,0.05,0.35,0.05)) 
sl = matplotlib.widgets.Slider(slax, "Trace #", 0, len(plotlist), valinit=0.0) 
def update_trace(): 
    ax.clear() 
    tracenum = int(np.floor(sl.val)) 
    ax.plot(plotlist[tracenum]) 
    fig.canvas.draw() 
sl.on_changed(update_trace) 
ax = self.fig.add_axes((0.6, 0.2, 0.35, 0.7)) 
fig.add_subplot(axes=self.traceax) 
update_trace() 

Oto przykład:

Plot image