30 satıra kadar bir çizgi grafiği görüntülemek için pyplot kullanıyorum. Grafikteki tek tek satırları hızlı bir şekilde göstermek ve gizlemek için bir yol eklemek istiyorum. Pyplot, renk veya stili değiştirmek için satır özelliklerini düzenleyebileceğiniz bir menüye sahiptir, ancak ilgilendiğiniz birini ayırmak için satırları gizlemek istediğinizde oldukça karmaşıktır. İdeal olarak, efsanedeki onay kutularını kullanmak istiyorum çizgileri göstermek ve gizlemek için. (Paint.Net gibi görüntü düzenleyicilerindeki katmanları gösterme ve gizleme gibi) Ben bunun pyplot ile mümkün olup olmadığından emin değilim, bu yüzden dağıtımı kolay oldukları sürece diğer modüllere açığım.Bir pyplot rakamı gösterdikten sonra çizgileri gizleme
7
A
cevap
13
İsterseniz, tıklatıldığında hat gösterecek/gösterecek olan efsaneye bir geri arama bağlayabilirsiniz. Burada basit bir örnek var: http://matplotlib.org/examples/event_handling/legend_picking.html
Çizgiler ve lejant işaretlerinin ilişkisini manuel olarak belirtmeye gerek kalmadan çalışması gereken bir "meraklısı" örneği aşağıda belirtilmiştir (Ayrıca birkaç özelliği daha vardır).
import numpy as np
import matplotlib.pyplot as plt
def main():
x = np.arange(10)
fig, ax = plt.subplots()
for i in range(1, 31):
ax.plot(x, i * x, label=r'$y={}x$'.format(i))
ax.legend(loc='upper left', bbox_to_anchor=(1.05, 1),
ncol=2, borderaxespad=0)
fig.subplots_adjust(right=0.55)
fig.suptitle('Right-click to hide all\nMiddle-click to show all',
va='top', size='large')
interactive_legend().show()
def interactive_legend(ax=None):
if ax is None:
ax = plt.gca()
if ax.legend_ is None:
ax.legend()
return InteractiveLegend(ax.legend_)
class InteractiveLegend(object):
def __init__(self, legend):
self.legend = legend
self.fig = legend.axes.figure
self.lookup_artist, self.lookup_handle = self._build_lookups(legend)
self._setup_connections()
self.update()
def _setup_connections(self):
for artist in self.legend.texts + self.legend.legendHandles:
artist.set_picker(10) # 10 points tolerance
self.fig.canvas.mpl_connect('pick_event', self.on_pick)
self.fig.canvas.mpl_connect('button_press_event', self.on_click)
def _build_lookups(self, legend):
labels = [t.get_text() for t in legend.texts]
handles = legend.legendHandles
label2handle = dict(zip(labels, handles))
handle2text = dict(zip(handles, legend.texts))
lookup_artist = {}
lookup_handle = {}
for artist in legend.axes.get_children():
if artist.get_label() in labels:
handle = label2handle[artist.get_label()]
lookup_handle[artist] = handle
lookup_artist[handle] = artist
lookup_artist[handle2text[handle]] = artist
lookup_handle.update(zip(handles, handles))
lookup_handle.update(zip(legend.texts, handles))
return lookup_artist, lookup_handle
def on_pick(self, event):
handle = event.artist
if handle in self.lookup_artist:
artist = self.lookup_artist[handle]
artist.set_visible(not artist.get_visible())
self.update()
def on_click(self, event):
if event.button == 3:
visible = False
elif event.button == 2:
visible = True
else:
return
for artist in self.lookup_artist.values():
artist.set_visible(visible)
self.update()
def update(self):
for artist in self.lookup_artist.values():
handle = self.lookup_handle[artist]
if artist.get_visible():
handle.set_visible(True)
else:
handle.set_visible(False)
self.fig.canvas.draw()
def show(self):
plt.show()
if __name__ == '__main__':
main()
Bu, ilgili sanatçıları açıp kapatmak için gösterge öğelerini tıklatmanıza olanak tanır. Örneğin, bundan gidebilir:
Bu Kime:
İlgili konular
- 1. Rakamı
- 2. pyplot
- 3. PyPlot
- 4. Matplotlib'de pyplot kullanmadan bir arsa nasıl oluşturulur
- 5. Açısal 2, diziyi ngOnInit vaadini gösterdikten sonra görüntüyü yenilemiyor
- 6. Uyarı kutusunu gösterdikten sonra nasıl otomatik olarak gizleyebilirim?
- 7. Pyplot Altçizimler
- 8. pyplot: gerçekten yavaş yavaş ısı eşlemleri oluşturma
- 9. Eksen Etiketlerini Gizleme
- 10. Gizleme
- 11. 2014b'de 2013b'de kaydedilen bir rakamı yeniden çizin
- 12. regex: tek haneli bir rakamı bul
- 13. Değişken genişlik çizgileri olan Bokeh çizgileri
- 14. Bir Notta gösterilen DBGrid çizgileri
- 15. Gizleme Eclipse Menü Çubuğu (otomatik gizleme)
- 16. nasıl pyplot bir şekil için eksenlerinin bir listesini almak için?
- 17. bash, bir süre içinde değişim için iki rakamı karşılaştırır.
- 18. ug gizleme
- 19. Denetleyici eylemi tamamlandıktan sonra Javascript'i kullanarak görüntüyü gizleme MVC3
- 20. MFC'de bir menü öğesini gizleme
- 21. Bir kelimeyi karakterlerle gizleme (hangman)
- 22. Bir satırdaki kaydırma çubuğunu gizleme
- 23. Gizleme oyunu ekranı
- 24. DISPLAY olmadan pyplot kullanmak mümkün mü?
- 25. Çevreye girerken linebreak'i gizleme
- 26. Matplotlib: kapalı bir rakamı tekrar açmak mı istiyorsunuz?
- 27. Android ile Zbar: Tarayıcı kamera viewport, tarayıcıda URL'yi gösterdikten sonra etkin değil ve siyah kalıyor
- 28. hello.js login() hatası: Kullanıcıya giriş pop-up gösterdikten sonra yangınları 'Popup engellendi'
- 29. Tam sayı fonksiyonuna sahip Romen Rakamı
- 30. WPF - liste kutularını gizleme
Sadece sorunuzu zenginleştirmek için, size bu tür davranışları bulabilirsiniz (çizgiler göstereceğini kendisi seçmek http://gnuplot.sourceforge.net/demo_svg_5.0/simple.html gnuplotta (altyazıyı tıklayarak altyazıyı tıklayarak grafiği), pyplottan başka bir araca (gnuplot) ne kadar istekli olduğunuzu bilmiyorum ama python ile devam etmek ve gnuplot kullanmak istiyorsanız bir 'gnuplot.py' arayüzü var. – David
Bu tam olarak aradığım işlevselliktir. Onu kazacağım ve programımla ne kadar iyi çalışacağını göreceğim. – sommerjj
Güncelleme: Ben gnuplottan vazgeçiyorum. Benim için iyi çalışmıyordu. – sommerjj