我是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()
和我的输出:
答案 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()