2017-06-27 4 views
0

Ich bin ein Neuling zu Python und versuche, ein Diagramm für einige Frame-IDs zu plotten, können die Frame-IDs von knapp 10 bis 600 oder mehr in der Zahl variieren. Derzeit habe ich das und es funktioniert und zeigt 37 IDs zusammen, aber wenn ich 500 IDs angenommen habe, klemmt sie sie und überlappt die Textdaten. Ich möchte in der Lage, es so zu schaffen, dass in einem Rutsch ich nur die ersten 20-IDs angezeigt werden, und es gibt eine Bildlaufleiste, die die nächsten 20 IDs angezeigt und so weiter .. Mein Code so weit:Scrollbar Balkendiagramm 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() 

und meine Ausgabe:

enter image description here

+0

Der Code zeigt keinen Versuch, einen Schieber zu verwenden. Sie hätten etwas über Schieberegler herausgefunden, indem Sie nach etwas wie "Matplotlib-Schieberegler" gesucht haben. Da dies deine erste Frage zu SO ist, beantworte ich deine Frage immer noch, aber sei dir bewusst, dass du etwas Mühe haben musst, um das Problem zu lösen, wenn du hier eine Frage stellst. Lesen Sie auch [fragen]. – ImportanceOfBeingErnest

Antwort

0

Matplotlib bietet eine Slider widget. Sie können dies verwenden, um das Array zu zerlegen, um nur den ausgewählten Teil des Arrays darzustellen und anzuzeigen.

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

Vielen Dank @ImportanceOfBeingErnest! Das ist sehr hilfreich! Ich werde Ihren Punkt beachten! – cbhush

Verwandte Themen