Python tkinter NavigationToolbar2TkAgg更改imshow的[z]格式

Python tkinter NavigationToolbar2TkAgg更改imshow的[z]格式,python,tkinter,format,toolbar,Python,Tkinter,Format,Toolbar,我在tkinter GUI中使用imshow显示图像,并添加了NavigationToolbar2TkAgg(python3.5)。与(查看视觉效果)非常类似,我想更改坐标和z值的格式(特别是,我所有的z值都在0-10000之间,所以我想把它们写出来,而不是使用科学符号) 对于x和y,通过更改格式协调句柄,这非常容易,但我似乎找不到任何东西来更改最后一位[xxx]。我尝试了格式化光标\u数据,但似乎也不是这样 有人知道解决办法吗 似乎[z]值仅针对imshow显示,而不是针对常规绘图显示 下面是

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

对于x和y,通过更改
格式协调
句柄,这非常容易,但我似乎找不到任何东西来更改最后一位
[xxx]
。我尝试了
格式化光标\u数据
,但似乎也不是这样

有人知道解决办法吗

似乎
[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()
在的
mouse\u move()
方法中,光标数据及其格式是从Axis实例中最顶层的艺术家处获得的,而不是从Axis实例本身获得的,如坐标。所以你应该做的是:

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)