Python -Seaborn heatmap绑定到鼠标单击事件

时间:2018-02-23 12:25:06

标签: python-3.x canvas heatmap seaborn mouseclick-event

我正在开发一个关于tkinter的简单(目前为止)GUI。 我现在拥有的是一个GUI窗口,在同一个窗口中有一个canvas对象和一个树视图表。 我的目标是加载csv数据生成热图并使用这些位置显示有关所点击位置的更多数据。 我已经可以从csv生成热图(下图)。

我现在需要的是canvas检测我的鼠标点击并根据来自相同的点击转移数据(或者不同于它的不同)csv到桌子。我尝试了一些东西,但我似乎并不了解如何在画布或表格上分配数据以便识别它。

        def tableDisplayFromGraph(self):
        tableframe = tk.Frame(self.master)
        tableframe.grid(row=2, column=10, ipadx=4, pady=2, sticky ="e")  ## Packing against tableframe Frame

        COLUMNS = ['Type', 'Value']  ## Column Headers for Data

        ## See Documentation for more info on Treeview
        table = ttk.Treeview(tableframe, columns=COLUMNS, show='headings', padding=4)
        table.grid(row=0, column=0)

        for column in COLUMNS:  ## Setting Column Header
            table.heading(column, text=column)

        scroll = tk.Scrollbar(tableframe, command=table.yview)  ## Adding Vertical Scrollbar
        scroll.grid(row=0, column=1) # problem how to set scrollbar inside the table :/
        table.configure(yscrollcommand=scroll.set)  ## Attach Scrollbar :/

    def canvas(self):

        f = plt.figure(figsize=(8, 8), dpi=110)
        a = f.add_subplot(111)
        if not self.Data.empty:

            pivot_table = self.Data.pivot('Rows', 'Columns', 'B635 Mean')
            plt.xlabel('Columns', size=12)
            plt.ylabel('Rows', size=12)
            plt.title('Heat Map', size=15)
            sns.heatmap(pivot_table, annot=True, annot_kws={'size': 8},fmt="0.0f", linewidths=0, square=True, cmap='Reds')
        #a.clear()

        canvasFig = FigureCanvasTkAgg(f, master=self.master)
        canvasFig.get_tk_widget().grid(row=0, column=0, rowspan=5, columnspan=5, padx=30, pady=10, sticky="ew")

        navigatorFrame = tk.Frame(self.master)
        navigatorFrame.grid(row=21, column=0, columnspan=5, padx=30, sticky="nw")

        toolbar = NavigationToolbar2TkAgg(canvasFig, navigatorFrame)
        toolbar.update()
        canvasFig._tkcanvas.grid()
        f.canvas.mpl_connect('pick_event', self.pick)

    def pick(self, event):

        if canvas.find_withtag(CURRENT):
            canvas.itemconfig(CURRENT, fill="blue")
            canvas.update_idletasks()
            canvas.after(200)
            canvas.itemconfig(CURRENT, fill="red")

        canvas.bind("<Button-1>", self.pick)enter code here

当我在热图周围盘旋时,画布不会显示x,y坐标。 pick是我的click事件的函数。 任何帮助将不胜感激。

这是我的GUI的图像。左边是我的热图,右边是我的表树视图小部件,用于显示更多数据:

enter image description here

0 个答案:

没有答案