【问题标题】:tkinter NavigationToolbar2TkAgg change [z] format for imshowtkinter NavigationToolbar2TkAgg 更改 imshow 的 [z] 格式
【发布时间】:2017-06-01 08:10:47
【问题描述】:

我在 tkinter GUI 中使用 imshow 显示图像,并且添加了 NavigationToolbar2TkAgg (python3.5)。与this question 非常相似(查看视觉效果),我想更改坐标和 z 值的格式(特别是,我所有的 z 值都在 0-10000 之间,所以我想把它们写出来而不是使用科学记数法)。

对于 x 和 y,这很容易通过更改 format_coord 句柄来完成,但我似乎找不到任何东西来更改最后一位 [xxx]。我试过format_cursor_data,但似乎也不是。

有人知道解决办法吗?

[z] 的值似乎只针对imshow 显示,而不是针对常规绘图。

这是重现问题的最小代码示例

import sys
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.figure import Figure

import tkinter as tk
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg,NavigationToolbar2TkAgg

top = tk.Tk()

fig = plt.figure()
plt.imshow(np.array([[0,1],[1,2]]))

ax = fig.gca()
ax.format_coord = lambda x,y: "x:%4u, y:%4u" % (x,y)
ax.format_cursor_data = lambda z: "Hello" % (z) # does nothing

canvas = FigureCanvasTkAgg(fig,master=top)
canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)
canvas.show()

toolbar = NavigationToolbar2TkAgg(canvas, top)
toolbar.update()

top.mainloop()

【问题讨论】:

    标签: python tkinter format toolbar


    【解决方案1】:

    Matplotlib's NavigationToolbar2 classmouse_move() 方法中,光标数据及其格式是从Axes 实例中最顶层的Artist 获得的,而不是像坐标那样从Axes 实例本身获得。所以你应该做的是:

    fig = Figure()
    ax = fig.add_subplot(111)
    img = np.array([[0,10000],[10000,20000]])
    imgplot = ax.imshow(img, interpolation='none')
    
    # Modify the coordinates format of the Axes instance
    ax.format_coord = lambda x,y: "x:{0:>4}, y:{0:>4}".format(int(x), int(y))
    
    # Modify the cursor data format of the Artist created by imshow()
    imgplot.format_cursor_data = lambda z: "Hello: {}".format(z)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-05
      • 1970-01-01
      • 1970-01-01
      • 2017-10-26
      • 1970-01-01
      • 2015-12-09
      • 2017-12-23
      • 2021-11-23
      相关资源
      最近更新 更多