Пример #1
0
def _pcolormesh_nonortho(axes, workspace, to_display, *args, **kwargs):
    '''
    Essentially the same as :meth:`matplotlib.axes.Axes.pcolormesh` and adds arguments related to
    plotting slices on nonorthogonal axes. It requires a non-standard Axes type. See
    https://matplotlib.org/examples/axes_grid/demo_curvelinear_grid.html.

    NOTE: Do NOT make this part of the public API until a discussion has been had about whether this
    api is sensible. It is placed here for testing purposes and is used in the sliceviewer.

    :param axes:      :class:`matplotlib.axes.Axes` object that will do the plotting
    :param workspace: :class:`mantid.api.MatrixWorkspace` or :class:`mantid.api.IMDHistoWorkspace`
                      to extract the data from
    :param to_display: Callable accepting two numpy arrays to transfrom from nonorthogonal
                       coordinates to orthogonal display
    :param transpose: ``bool`` to transpose the x and y axes of the plotted dimensions of an MDHistoWorkspace
    '''
    transpose = kwargs.pop('transpose', False)
    (normalization, kwargs) = get_normalization(workspace, **kwargs)
    indices, kwargs = get_indices(workspace, **kwargs)
    x, y, z = get_md_data2d_bin_bounds(workspace,
                                       indices=indices,
                                       normalization=normalization,
                                       transpose=transpose)
    X, Y = numpy.meshgrid(x, y)
    xx, yy = to_display(X, Y)
    _setLabels2D(axes, workspace, indices, transpose)
    return axes.pcolormesh(xx, yy, z, *args, **kwargs)
Пример #2
0
def imshow(axes, workspace, *args, **kwargs):
    '''
    Essentially the same as :meth:`matplotlib.axes.Axes.imshow`.

    :param axes:      :class:`matplotlib.axes.Axes` object that will do the plotting
    :param workspace: :class:`mantid.api.MatrixWorkspace` or :class:`mantid.api.IMDHistoWorkspace`
                      to extract the data from
    :param distribution: ``None`` (default) asks the workspace. ``False`` means
                         divide by bin width. ``True`` means do not divide by bin width.
                         Applies only when the the matrix workspace is a histogram.
    :param normalization: ``None`` (default) ask the workspace. Applies to MDHisto workspaces. It can override
                          the value from displayNormalizationHisto. It checks only if
                          the normalization is mantid.api.MDNormalization.NumEventsNormalization
    :param indices: Specify which slice of an MDHistoWorkspace to use when plotting. Needs to be a tuple
                    and will be interpreted as a list of indices. You need to use ``slice(None)`` to
                    select which dimensions to plot. *e.g.* to select the last two axes to plot from a
                    3D volume use ``indices=(5, slice(None), slice(None))`` where the 5 is the bin selected
                    for the first axis.
    :param slicepoint: Specify which slice of an MDHistoWorkspace to use when plotting in the dimension units.
                       You need to use ``None`` to select which dimension to plot. *e.g.* to select the last
                       two axes to plot from a 3D volume use ``slicepoint=(1.0, None, None)`` where the 1.0 is
                       the value of the dimension selected for the first axis.
    :param axisaligned: ``False`` (default). If ``True``, or if the workspace has a variable
                        number of bins, the polygons will be aligned with the axes
    :param transpose: ``bool`` to transpose the x and y axes of the plotted dimensions of an MDHistoWorkspace
    '''
    transpose = kwargs.pop('transpose', False)
    if isinstance(workspace, mantid.dataobjects.MDHistoWorkspace):
        (normalization, kwargs) = get_normalization(workspace, **kwargs)
        indices, kwargs = get_indices(workspace, **kwargs)
        x, y, z = get_md_data2d_bin_bounds(workspace, normalization, indices,
                                           transpose)
        _setLabels2D(axes, workspace, indices, transpose)
    else:
        (aligned, kwargs) = check_resample_to_regular_grid(workspace, **kwargs)
        (normalize_by_bin_width,
         kwargs) = get_normalize_by_bin_width(workspace, axes, **kwargs)
        (distribution, kwargs) = get_distribution(workspace, **kwargs)
        if aligned:
            (x, y, z) = get_matrix_2d_ragged(workspace,
                                             normalize_by_bin_width,
                                             histogram2D=True,
                                             transpose=transpose)
        else:
            (x, y, z) = get_matrix_2d_data(workspace,
                                           distribution=distribution,
                                           histogram2D=True,
                                           transpose=transpose)
        _setLabels2D(axes,
                     workspace,
                     transpose=transpose,
                     normalize_by_bin_width=normalize_by_bin_width)
    if 'extent' not in kwargs:
        if x.ndim == 2 and y.ndim == 2:
            kwargs['extent'] = [x[0, 0], x[0, -1], y[0, 0], y[-1, 0]]
        else:
            kwargs['extent'] = [x[0], x[-1], y[0], y[-1]]
    return mantid.plots.modest_image.imshow(axes, z, *args, **kwargs)
Пример #3
0
 def test_get_md_data2d_bin_bounds(self):
     x, y, data = funcs.get_md_data2d_bin_bounds(
         self.ws_MD_2d, mantid.api.MDNormalization.NoNormalization)
     # logger.error(str(coords))
     np.testing.assert_allclose(x,
                                np.array([-3, -1.8, -0.6, 0.6, 1.8, 3]),
                                atol=1e-10)
     np.testing.assert_allclose(y,
                                np.array([-10, -6, -2, 2, 6, 10.]),
                                atol=1e-10)
     np.testing.assert_allclose(data,
                                np.arange(25).reshape(5, 5),
                                atol=1e-10)
Пример #4
0
 def test_get_md_data2d_bin_bounds_indices2(self, mdws):
     x, y, z = funcs.get_md_data2d_bin_bounds(mdws, False,
                                              (slice(None), 0, slice(None)))
     np.testing.assert_allclose(np.arange(-3, 3.6, 0.6), x, atol=1e-14)
     np.testing.assert_allclose(range(-20, 24, 4), y)
Пример #5
0
 def test_get_md_data2d_bin_bounds_indices(self, mdws):
     x, y, z = funcs.get_md_data2d_bin_bounds(mdws, False,
                                              (0, slice(None), slice(None)))
     np.testing.assert_allclose(range(-10, 12, 2), x)
     np.testing.assert_allclose(range(-20, 24, 4), y)