def _createScatterView(self): plot = ScatterView(self) self.scatter = plot toolBar = toolbar.ProfileToolBar(plot, plot.getPlotWidget()) toolBar.setScheme("scatter") plot.addToolBar(toolBar) toolBar = plot.getScatterProfileToolBar() toolBar.clear()
class XYVScatterPlot(qt.QWidget): """ Widget for plotting one or more scatters (with identical x, y coordinates). """ def __init__(self, parent=None): """ :param parent: Parent QWidget """ super(XYVScatterPlot, self).__init__(parent) self.__y_axis = None """1D array""" self.__y_axis_name = None self.__values = None """List of 1D arrays (for multiple scatters with identical x, y coordinates)""" self.__x_axis = None self.__x_axis_name = None self.__x_axis_errors = None self.__y_axis = None self.__y_axis_name = None self.__y_axis_errors = None self._plot = ScatterView(self) self._plot.setColormap( Colormap(name="viridis", vmin=None, vmax=None, normalization=Colormap.LINEAR)) self._slider = HorizontalSliderWithBrowser(parent=self) self._slider.setMinimum(0) self._slider.setValue(0) self._slider.valueChanged[int].connect(self._sliderIdxChanged) self._slider.setToolTip("Select auxiliary signals") layout = qt.QGridLayout() layout.setContentsMargins(0, 0, 0, 0) layout.addWidget(self._plot, 0, 0) layout.addWidget(self._slider, 1, 0) self.setLayout(layout) def _sliderIdxChanged(self, value): self._updateScatter() def getScatterView(self): """Returns the :class:`ScatterView` used for the display :rtype: ScatterView """ return self._plot def getPlot(self): """Returns the plot used for the display :rtype: PlotWidget """ return self._plot.getPlotWidget() def setScattersData(self, y, x, values, yerror=None, xerror=None, ylabel=None, xlabel=None, title="", scatter_titles=None, xscale=None, yscale=None): """ :param ndarray y: 1D array for y (vertical) coordinates. :param ndarray x: 1D array for x coordinates. :param List[ndarray] values: List of 1D arrays of values. This will be used to compute the color map and assign colors to the points. There should be as many arrays in the list as scatters to be represented. :param ndarray yerror: 1D array of errors for y (same shape), or None. :param ndarray xerror: 1D array of errors for x, or None :param str ylabel: Label for Y axis :param str xlabel: Label for X axis :param str title: Main graph title :param List[str] scatter_titles: Subtitles (one per scatter) :param str xscale: Scale of X axis in (None, 'linear', 'log') :param str yscale: Scale of Y axis in (None, 'linear', 'log') """ self.__y_axis = y self.__x_axis = x self.__x_axis_name = xlabel or "X" self.__y_axis_name = ylabel or "Y" self.__x_axis_errors = xerror self.__y_axis_errors = yerror self.__values = values self.__graph_title = title or "" self.__scatter_titles = scatter_titles self._slider.valueChanged[int].disconnect(self._sliderIdxChanged) self._slider.setMaximum(len(values) - 1) if len(values) > 1: self._slider.show() else: self._slider.hide() self._slider.setValue(0) self._slider.valueChanged[int].connect(self._sliderIdxChanged) if xscale is not None: self._plot.getXAxis().setScale('log' if xscale == 'log' else 'linear') if yscale is not None: self._plot.getYAxis().setScale('log' if yscale == 'log' else 'linear') self._updateScatter() def _updateScatter(self): x = self.__x_axis y = self.__y_axis idx = self._slider.value() if self.__graph_title: title = self.__graph_title # main NXdata @title if len(self.__scatter_titles) > 1: # Append dataset name only when there is many datasets title += '\n' + self.__scatter_titles[idx] else: title = self.__scatter_titles[idx] # scatter dataset name self._plot.setGraphTitle(title) self._plot.setData(x, y, self.__values[idx], xerror=self.__x_axis_errors, yerror=self.__y_axis_errors) self._plot.resetZoom() self._plot.getXAxis().setLabel(self.__x_axis_name) self._plot.getYAxis().setLabel(self.__y_axis_name) def clear(self): self._plot.getPlotWidget().clear()
class XYVScatterPlot(qt.QWidget): """ Widget for plotting one or more scatters (with identical x, y coordinates). """ def __init__(self, parent=None): """ :param parent: Parent QWidget """ super(XYVScatterPlot, self).__init__(parent) self.__y_axis = None """1D array""" self.__y_axis_name = None self.__values = None """List of 1D arrays (for multiple scatters with identical x, y coordinates)""" self.__x_axis = None self.__x_axis_name = None self.__x_axis_errors = None self.__y_axis = None self.__y_axis_name = None self.__y_axis_errors = None self._plot = ScatterView(self) self._plot.setColormap(Colormap(name="viridis", vmin=None, vmax=None, normalization=Colormap.LINEAR)) self._slider = HorizontalSliderWithBrowser(parent=self) self._slider.setMinimum(0) self._slider.setValue(0) self._slider.valueChanged[int].connect(self._sliderIdxChanged) self._slider.setToolTip("Select auxiliary signals") layout = qt.QGridLayout() layout.setContentsMargins(0, 0, 0, 0) layout.addWidget(self._plot, 0, 0) layout.addWidget(self._slider, 1, 0) self.setLayout(layout) def _sliderIdxChanged(self, value): self._updateScatter() def getPlot(self): """Returns the plot used for the display :rtype: PlotWidget """ return self._plot.getPlotWidget() def setScattersData(self, y, x, values, yerror=None, xerror=None, ylabel=None, xlabel=None, title="", scatter_titles=None): """ :param ndarray y: 1D array for y (vertical) coordinates. :param ndarray x: 1D array for x coordinates. :param List[ndarray] values: List of 1D arrays of values. This will be used to compute the color map and assign colors to the points. There should be as many arrays in the list as scatters to be represented. :param ndarray yerror: 1D array of errors for y (same shape), or None. :param ndarray xerror: 1D array of errors for x, or None :param str ylabel: Label for Y axis :param str xlabel: Label for X axis :param str title: Main graph title :param List[str] scatter_titles: Subtitles (one per scatter) """ self.__y_axis = y self.__x_axis = x self.__x_axis_name = xlabel or "X" self.__y_axis_name = ylabel or "Y" self.__x_axis_errors = xerror self.__y_axis_errors = yerror self.__values = values self.__graph_title = title or "" self.__scatter_titles = scatter_titles self._slider.valueChanged[int].disconnect(self._sliderIdxChanged) self._slider.setMaximum(len(values) - 1) if len(values) > 1: self._slider.show() else: self._slider.hide() self._slider.setValue(0) self._slider.valueChanged[int].connect(self._sliderIdxChanged) self._updateScatter() def _updateScatter(self): x = self.__x_axis y = self.__y_axis idx = self._slider.value() title = "" if self.__graph_title: title += self.__graph_title + "\n" # main NXdata @title title += self.__scatter_titles[idx] # scatter dataset name self._plot.setGraphTitle(title) self._plot.setData(x, y, self.__values[idx], xerror=self.__x_axis_errors, yerror=self.__y_axis_errors) self._plot.resetZoom() self._plot.getXAxis().setLabel(self.__x_axis_name) self._plot.getYAxis().setLabel(self.__y_axis_name) def clear(self): self._plot.getPlotWidget().clear()