在嵌入式matplotlib + pyqt中显示光标坐标

时间:2017-08-30 23:59:57

标签: matplotlib pyqt

我正在使用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

0 个答案:

没有答案