我在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()
答案 0 :(得分:1)
在Matplotlib's NavigationToolbar2 class的mouse_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)