2017-06-27 4 views
0

Je suis un novice de python et j'essaie de tracer un graphique pour certains ids de trame, les ids de trame peuvent varier d'environ 10 à 600 ou plus en nombre. Actuellement, j'ai ceci et cela fonctionne et affiche 37 ids ensemble mais si je suppose que 500 ids, il les encombre et chevauche les données de texte. Je veux être en mesure de créer de telle sorte que dans une seule fois j'afficher seulement les 20 premières cartes d'identité et il y a une barre de défilement qui affiche les 20 ids et ainsi de suite .. Mon code à ce jour:Scrollable Bar graphe matplotlib

import matplotlib.pyplot as plt; 
import numpy as np 

fig,ax=plt.subplots(figsize=(100,2)) 

x=range(1,38) 
y=[1]*len(x) 

plt.bar(x,y,width=0.7,align='edge',color='green',ecolor='black') 

for i,txt in enumerate(x): 

    ax.annotate(txt, (x[i],y[i])) 

current=plt.gca() 

current.axes.xaxis.set_ticks([]) 

current.axes.yaxis.set_ticks([]) 


plt.show() 

et ma sortie:

enter image description here

+0

Le code ne montre aucune tentative d'utiliser un curseur. Vous auriez découvert des curseurs en cherchant quelque chose comme "curseur matplotlib". Puisque c'est votre première question sur SO, j'ai quand même répondu à votre question, mais sachez que vous devez faire des efforts pour résoudre le problème lorsque vous posez une question ici. Lisez aussi [ask]. – ImportanceOfBeingErnest

Répondre

0

Matplotlib fournit un Slider widget. Vous pouvez l'utiliser pour découper le tableau en tracé et n'afficher que la partie du tableau sélectionnée.

import matplotlib.pyplot as plt 
from matplotlib.widgets import Slider 
import numpy as np 

fig,ax=plt.subplots(figsize=(10,6)) 

x=np.arange(1,38) 
y=np.random.rand(len(x)) 

N=20 

def bar(pos): 
    pos = int(pos) 
    ax.clear() 
    if pos+N > len(x): 
     n=len(x)-pos 
    else: 
     n=N 
    X=x[pos:pos+n] 
    Y=y[pos:pos+n] 
    ax.bar(X,Y,width=0.7,align='edge',color='green',ecolor='black') 

    for i,txt in enumerate(X): 
     ax.annotate(txt, (X[i],Y[i])) 

    ax.xaxis.set_ticks([]) 
    ax.yaxis.set_ticks([]) 

barpos = plt.axes([0.18, 0.05, 0.55, 0.03], facecolor="skyblue") 
slider = Slider(barpos, 'Barpos', 0, len(x)-N, valinit=0) 
slider.on_changed(bar) 

bar(0) 

plt.show() 

enter image description here

+0

Merci beaucoup @ImportanceOfBeingErnest! C'est très utile! Je vais garder votre point à l'esprit! – cbhush