2017-06-01 3 views
1

Ich zeige ein Bild mit imshow innerhalb einer GUI tkinter und ich habe eine NavigationToolbar2TkAgg (python3.5) hinzugefügt. Ganz ähnlich wie this question (schau es dir für Visuals an), ich möchte die Formatierung der Koordinaten und Z-Werte ändern (insbesondere sind alle meine Z-Werte zwischen 0-10000, also möchte ich sie ausschreiben, anstatt wissenschaftliche Notation zu verwenden).tkinter NavigationToolbar2TkAgg ändern [z] Format für imshow

Für X und Y das war ziemlich einfach zu tun, indem Sie den format_coord Griff ändern, aber ich kann nichts finden, um das letzte Bit [xxx] zu ändern. Ich habe versucht format_cursor_data, scheint es aber auch nicht zu sein.

Wer weiß eine Lösung?

Es scheint, dass der Wert [z] nur für imshow angezeigt wird, nicht für normale Plots.

geht hier ein minimales Codebeispiel, das Problem zu reproduzieren

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() 

Antwort

1

In mouse_move() Methode der Matplotlib's NavigationToolbar2 class, die Cursor-Daten und die Formatierung von dem obersten Künstler in der Achsen-Instanz erhalten, anstatt von den Achsen Instanz selbst, wie für die Koordinaten. Also, was Sie tun sollten, ist:

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) 

Screenshot