我正在使用matplotlib作为PyQt 4应用程序中的嵌入式控件来显示图像并与之交互。我想在用户将其移动到图像上时显示光标坐标和基础值。我发现以下帖子解决了我的需求,但似乎无法让它工作: matplotlib values under cursor
这就是我所拥有的。首先,我从FigureCanvasQtAgg派生出一个类:
from matplotlib.figure import Figure
from matplotlib.backends.backend_qt4agg import FigureCanvasQtAgg as FigureCanvas
import matplotlib as mpImage
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle
class MatPlotLibImage(FigureCanvas):
def __init__(self, parent = None):
self.parent = parent
self.fig = Figure()
super(MatPlotLibImage, self).__init__(self.fig)
self.axes = self.fig.add_subplot(111)
self.axes.get_xaxis().set_visible(False)
self.axes.get_yaxis().set_visible(False)
def displayNumpyArray(self, myNumpyArray):
self.dataArray = myNumpyArray
self.dataRows = self.dataArray.shape[0]
self.dataColumns = self.dataArray.shape[1]
self.axes.clear()
imagePlot = self.axes.imshow(myNumpyArray, interpolation = "nearest")
我也在创建一个以上面为基础的新类,这是必须显示coords +值的那个:
from MatPlotLibControl import *
class MainMatPlotLibImage(MatPlotLibControl):
def __init__(self, parent = None):
super(MainMatPlotLibImage, self).__init__(parent)
self.parent = parent
self.axes.format_coord = self.format_coord
def format_coord(self, x, y):
column = int(x + 0.5)
row = int(y + 0.5)
if column >= 0 and column <= self.dataColumns - 1 and row >= 0 and row <= self.dataRows - 1:
value = self.dataArray[row, column\
return 'x=%1.4f, y=%1.4f, z=%1.4f'%(column, row, value)
除了当我将光标移动到图像上时,我没有看到图中显示的坐标+值,所以一切都工作得很厉害。然后我发现这篇文章似乎暗示它们实际上显示在工具栏上,而不是图表本身:Disable coordinates from the toolbar of a Matplotlib figure
我没有使用工具栏,这可以解释为什么我什么也看不见。有谁知道这是否确实如此(即显示在工具栏上)?如果是这种情况,我仍然需要检索线索+底层值并在应用程序中的其他位置显示它们,但我注意到我的“format_coord()”覆盖永远不会被调用。提前感谢您的帮助。
-L