可滚动条形图matplotlib

时间:2017-06-27 23:26:52

标签: python matplotlib scrollbar

我是python的新手,我正在尝试绘制一些帧ID的图形,帧ID可以从数量上的大约10个变化到600个或更多。 目前,我有这个,它工作并显示37个ID,但如果我假设500个ID,它会混乱它们并重叠文本数据。我希望能够以这样的方式创建它:一次性我只显示前20个ID,并且有一个滚动条显示接下来的20个ID等等。 到目前为止我的代码:

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

1 个答案:

答案 0 :(得分: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