Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用matplotlib选择器更改轴限制_Python_Matplotlib_Pygtk - Fatal编程技术网

Python 使用matplotlib选择器更改轴限制

Python 使用matplotlib选择器更改轴限制,python,matplotlib,pygtk,Python,Matplotlib,Pygtk,我正在从事一个项目,在这个项目中,我创建了一个嵌入GTK容器中的绘图,我需要能够单击x轴和y轴的界限来更改它们的界限 到目前为止,这就是我必须创建拾取事件的原因 def makepickers(self): xaxis = self.ax.get_xticklabels() yaxis = self.ax.get_yticklabels() self.axlbls = (xaxis[0], xaxis[-1], yaxis[0], yaxis[-1]) for e

我正在从事一个项目,在这个项目中,我创建了一个嵌入GTK容器中的绘图,我需要能够单击x轴和y轴的界限来更改它们的界限

到目前为止,这就是我必须创建拾取事件的原因

def makepickers(self):
    xaxis = self.ax.get_xticklabels()
    yaxis = self.ax.get_yticklabels()
    self.axlbls = (xaxis[0], xaxis[-1], yaxis[0], yaxis[-1])
    for entry in self.axlbls:
        entry.set_picker(True)
获取记号标签,并将每个轴的上限和下限的选择器属性设置为true

双击限制后,我创建了一个gtk对话框,弹出并要求输入限制,然后将其传递到轴,调整图形大小并重新生成选择器

def onpick(self, event):
    pickedtick = event.artist
    if event.mouseevent.dblclick:
        dialog = gtk.Dialog(title='Set Limits',
                            parent=None,
                            flags=0,
                            buttons=(gtk.STOCK_OK, gtk.RESPONSE_OK))
        lbl = gtk.Label("Set Axis Limit")
        entry = gtk.Entry()
        dialog.vbox.pack_start(lbl, True, True, 0)
        dialog.vbox.pack_start(entry, True, True, 0)
        entry.show()
        lbl.show()
        response = dialog.run()
        if response == gtk.RESPONSE_OK:
            newlim = float(entry.get_text())
        dialog.destroy()
        idx = self.axlbls.index(pickedtick)
        if self.lim_option_x == 'Manual':
            if idx == 0: # x lower limit
                self.ax.set_xlim(left=newlim)
            if idx == 1: # x upper limit
                self.ax.set_xlim(right=newlim)
        if self.lim_option_y == 'Manual':
            if idx == 3: # y upper limit
                self.ax.set_ylim(top=newlim)
            if idx == 2: # y lower limit
                self.ax.set_ylim(bottom=newlim)
        del self.axlbls
        self.ax.relim()
        self.ax.autoscale_view()
        self.canvas.draw()
        self.makepickers()
“手动”选项由位于类中的复选框(每个轴上)确定

我的问题是,在调整限制时,它在最初几次起作用,但在它指出

    idx = self.axlbls.index(pickedtick)
ValueError: <matplotlib.text.Text object at 0x02D00870> is not in list
idx=self.axlbls.index(pickedtick)
ValueError:不在列表中

这也是一个不一致的错误。每次重新绘制画布或向图形中添加一个新点(可能会重新绘制轴)时,我都会重新生成选择器。不确定是否有人知道为什么会出现这种情况。非常感谢您的帮助。

draw\u事件中添加一个回电来重新设置您的选取器。