我正在使用python-tkinter模块构建GUI,并使用plt.figure嵌入了matplotlib条形图! 这是我的代码:
def graph(self):
f=plt.Figure(figsize=(40,4))
canvas=FigureCanvasTkAgg(f,self.canvas)
canvas.get_tk_widget().pack(side=TOP,fill=BOTH,expand=True)
ax=f.add_subplot(111)
f.subplots_adjust(left=0.00, right=0.99)
self.x=range(1,100) #for example
self.y=[1]*len(self.x)
self.N=10
self.f=f
self.ax=ax
barpos=f.add_axes([0.18, 0.03, 0.55, 0.07], facecolor='white')
slider=Slider(barpos, 'Plot',0,len(self.x)-self.N, valinit=0)
self.slider=slider
slider.on_changed(self.bar)
self.bar(0)
def bar(self,pos):
pos=int(pos)
N=self.N
self.ax.clear()
if pos + N > len(self.x):
n=len(self.x)-pos
else:
n=N
X=self.x[pos:pos+n]
Y=self.y[pos:pos+n]
self.ax.bar(X,Y,width=0.7, align='edge',color='green',alpha=0.07)
self.ax.margins(0.01,0)
for i,txt in enumerate(self.x):
**self.ax.axvline(x= i, color='r')** #*this line if I use it without embedding my plot in tkinter gives me a slider with vertical lines as shown in bottom image but if I use it in my gui code it puts the lines on the bars and not on the slider*
self.ax.annotate(self.fid[i], (self.x[i],0.25),horizontalalignment='right',fontsize=8,color='purple',weight='bold')
#I am annotating a bunch of stuff here
self.ax.axes.xaxis.set_ticks([])
self.ax.axes.yaxis.set_ticks([])
我一次显示10个条形图,我需要帮助在滑块上创建不同颜色的垂直线条。
我能够在matplotlib中实现此功能,其中我的图形在plt.subplots中创建,而plt.axes用于代替f.add_axes。 任何人都可以帮我复制这是我的tkinter滑块(使用f.add_axes创建)? 我添加了一个图像,其中顶部显示了我的滑块在tkinter画布中的嵌入方式 最底层的是使用plt.axvline创建,但同样的功能在嵌入画布的matplotlib图中不起作用。
我想复制画布中嵌入式绘图中底部滑块的垂直线条!任何帮助将非常感激!谢谢!
答案 0 :(得分:1)
Slider位于barpos
,而不是self.ax
如果您致电self.ax.axvline(..)
,则axvline将位于self.ax
内,这是带有条形的子图。
如果要在滑块轴上使用axvlines,则需要调用barpos.axvline()
。更好地使barpos成为一个类变量,然后调用
self.barpos.axvline()