代码之家  ›  专栏  ›  技术社区  ›  AlMa

Tkinter和matplotlib-导航工具栏2Tk-光标位置精度

  •  1
  • AlMa  · 技术社区  · 1 年前

    我有一个 Matplotlib 数字in Tkinter 帆布带a NavigationToolbar2Tk 在......下面

    当鼠标位于画布区域时,工具栏会自动显示 (x, y) 工具栏右侧的坐标。

    如何更改中显示的位数 (x,y) 协调?

    MWE

    from tkinter import Frame, Tk
    import matplotlib
    import matplotlib.pyplot as plt
    from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
    
    window_main = Tk()
    
    matplotlib.use("TkAgg") # Set matplotlib backend
    fig = plt.Figure()
    # Create canvas to hold figure
    canvas = FigureCanvasTkAgg(fig, window_main)
    canvas.get_tk_widget().grid(column=0, row=0)
    canvas.draw()
    # Create toolbar
    toolbar_frame = Frame(window_main)
    toolbar_frame.grid(column=0, row=1)
    toolbar = NavigationToolbar2Tk(canvas, toolbar_frame)
    
    ax = fig.add_subplot(111)
    
    data_x = [1,2,3]
    data_y = [2.5,4,1.2]
    
    ax.plot(data_x,data_y)
    
    fig.canvas.draw_idle()
    
    window_main.mainloop()
    
    1 回复  |  直到 1 年前
        1
  •  1
  •   JRiggles    1 年前

    您可以覆盖 ax.format_coord 具有自定义格式化程序功能,如中所述 this documentation 。这是一个工作示例:

    from tkinter import Frame, Tk
    import matplotlib
    import matplotlib.pyplot as plt
    from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
    
    
    def custom_format_coord(x: float, y: float) -> str:
        return f'x is {x:1.5f}, y is {y:1.5f}'  # format however you want!
    
    
    window_main = Tk()
    
    matplotlib.use("TkAgg") # Set matplotlib backend
    fig = plt.Figure()
    # Create canvas to hold figure
    canvas = FigureCanvasTkAgg(fig, window_main)
    canvas.get_tk_widget().grid(column=0, row=0)
    canvas.draw()
    # Create toolbar
    toolbar_frame = Frame(window_main)
    toolbar_frame.grid(column=0, row=1)
    toolbar = NavigationToolbar2Tk(canvas, toolbar_frame)
    
    ax = fig.add_subplot(111)
    
    data_x = [1,2,3]
    data_y = [2.5,4,1.2]
    
    ax.plot(data_x,data_y)
    # use the custom coordinate formatter to override ax.format_coord
    ax.format_coord = custom_format_coord
    
    fig.canvas.draw_idle()
    
    window_main.mainloop()
    

    您的自定义坐标格式化函数需要接受两个 float 值, x y ,因为这些是自动传递的。