2017-06-27 13 views
0

私はPythonの初心者ですが、いくつかのフレームIDのグラフをプロットしようとしていますが、フレームIDはおよそ10から数えて600以上に変わります。 現在、私はこれを持っていて、37 idsを一緒に表示していますが、500 idsとすると、それらが混乱してテキストデータが重なってしまいます。私は一度に私は最初の20個のIDが表示され、これまでに次の20のIDSなど..に 私のコードを表示し、スクロールバーが存在するように、それを作成することができるようにしたい:Scrollable Bar graph 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() 

と私の出力:

enter image description here

+0

コードは、スライダーを使用しようとする試みを示していません。あなたは "matplotlib slider"のようなものを探して、スライダーについて知っていたでしょう。これはあなたの最初の質問ですから、私はあなたの質問にまだ答えましたが、ここで質問をするときに問題を解決するために何らかの努力を示す必要があることに注意してください。また[ask]も読んでください。 – ImportanceOfBeingErnest

答えて

0

matplotlibのはSlider widgetを提供します。これを使用して配列をスライスし、選択した配列の一部のみをプ​​ロットして表示することができます。

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

ありがとうございます@ImportanceOfBeingErnest!これは非常に役に立ちます!私はあなたのポイントを念頭に置いています! – cbhush

関連する問題