예제 #1
0
 def test_auto_update(self):
     m = markers.text(y=1, x=2, text='a')
     nose.tools.assert_true(m.auto_update is False)
     m = markers.text(y=[1, 2], x=2, text='a')
     nose.tools.assert_true(m.auto_update is True)
     m.add_data(y1=1)
     nose.tools.assert_true(m.auto_update is False)
     m.add_data(y1=[1, 2])
     nose.tools.assert_true(m.auto_update is True)
예제 #2
0
 def test_auto_update(self):
     m = markers.text(y=1, x=2, text='a')
     assert m.auto_update is False
     m = markers.text(y=[1, 2], x=2, text='a')
     assert m.auto_update is True
     m.add_data(y1=1)
     assert m.auto_update is False
     m.add_data(y1=[1, 2])
     assert m.auto_update is True
예제 #3
0
 def test_auto_update(self):
     m = markers.text(y=1, x=2, text='a')
     assert m.auto_update is False
     m = markers.text(y=[1, 2], x=2, text='a')
     assert m.auto_update is True
     m.add_data(y1=1)
     assert m.auto_update is False
     m.add_data(y1=[1, 2])
     assert m.auto_update is True
예제 #4
0
 def test_auto_update(self):
     m = markers.text(y=1, x=2, text='a')
     nose.tools.assert_true(m.auto_update is False)
     m = markers.text(y=[1, 2], x=2, text='a')
     nose.tools.assert_true(m.auto_update is True)
     m.add_data(y1=1)
     nose.tools.assert_true(m.auto_update is False)
     m.add_data(y1=[1, 2])
     nose.tools.assert_true(m.auto_update is True)
예제 #5
0
def _test_plot_text_markers():
    s = Signal1D(np.arange(100).reshape([10, 10]))
    s.plot(navigator='spectrum')
    for i in range(s.axes_manager.shape[0]):
        m = markers.text(y=s.sum(-1).data[i] + 5, x=i, text='abcdefghij'[i])
        s.add_marker(m, plot_on_signal=False)
    x = s.axes_manager.shape[-1] / 2  # middle of signal plot
    m = markers.text(x=x, y=s.inav[x].data + 2, text=[i for i in 'abcdefghij'])
    s.add_marker(m)
    return s
예제 #6
0
def test_plot_markers_mpl_options():
    # check if required parameters are shown in repr
    _test_plot_markers_repr(markers.arrow(10, 20, 30, 40),
                            ['x1', 'y1', 'x2', 'y2',
                             'edgecolor', 'arrowstyle'])
    _test_plot_markers_repr(markers.ellipse(10, 20, 30, 40, color='red'),
                            ['x', 'y', 'width', 'height',
                             'edgecolor'])
    _test_plot_markers_repr(markers.horizontal_line(10),
                            ['y', 'color'])
    _test_plot_markers_repr(markers.horizontal_line_segment(10, 20, 30),
                            ['x1', 'x2', 'y', 'color'])
    _test_plot_markers_repr(markers.line_segment(10, 20, 30,40),
                            ['x1', 'x2', 'y1', 'y2', 'color'])
    _test_plot_markers_repr(markers.point(10, 20),
                            ['x', 'x', 'color', 'size'])
    m = markers.rectangle(10, 20, 30, 40, color='red')
    _test_plot_markers_repr(m, ['edgecolor'])
    # check if 'color' property is converted to 'edgecolor'
    assert 'color' not in m.marker_properties
    assert 'edgecolor' in m.marker_properties
    assert m.marker_properties['edgecolor'] == 'red'

    _test_plot_markers_repr(markers.text(10,20,"test"),
                            ['x', 'y', 'text', 'color'])
    _test_plot_markers_repr(markers.vertical_line(10),
                            ['x', 'color'])
    m = markers.vertical_line_segment(10, 20, 30)
    _test_plot_markers_repr(m,['x', 'y1', 'y2', 'color'])
예제 #7
0
 def test_add_several_permanent_markers(self):
     s = Signal1D(np.arange(10))
     m_point = markers.point(x=5, y=5)
     m_line = markers.line_segment(x1=5, x2=10, y1=5, y2=10)
     m_vline = markers.vertical_line(x=5)
     m_vline_segment = markers.vertical_line_segment(x=4, y1=3, y2=6)
     m_hline = markers.horizontal_line(y=5)
     m_hline_segment = markers.horizontal_line_segment(x1=1, x2=9, y=5)
     m_rect = markers.rectangle(x1=1, x2=3, y1=5, y2=10)
     m_text = markers.text(x=1, y=5, text="test")
     m_arrow = markers.arrow(x1=4, y1=5, x2=6, y2=6, arrowstyle='<->')
     m_ellipse = markers.ellipse(x=10, y=11, width=4, height=6)
     s.add_marker(m_point, permanent=True)
     s.add_marker(m_line, permanent=True)
     s.add_marker(m_vline, permanent=True)
     s.add_marker(m_vline_segment, permanent=True)
     s.add_marker(m_hline, permanent=True)
     s.add_marker(m_hline_segment, permanent=True)
     s.add_marker(m_rect, permanent=True)
     s.add_marker(m_text, permanent=True)
     s.add_marker(m_arrow, permanent=True)
     s.add_marker(m_ellipse, permanent=True)
     assert len(list(s.metadata.Markers)) == 10
     with pytest.raises(ValueError):
         s.add_marker(m_rect, permanent=True)
예제 #8
0
 def test_save_load_permanent_marker_all_types(self):
     x1, y1, x2, y2 = 5, 2, 1, 8
     s = Signal2D(np.arange(100).reshape(10, 10))
     m0_list = [
         markers.point(x=x1, y=y1),
         markers.horizontal_line(y=y1),
         markers.horizontal_line_segment(x1=x1, x2=x2, y=y1),
         markers.line_segment(x1=x1, x2=x2, y1=y1, y2=y2),
         markers.rectangle(x1=x1, x2=x2, y1=y1, y2=y2),
         markers.text(x=x1, y=y1, text="test"),
         markers.vertical_line(x=x1),
         markers.vertical_line_segment(x=x1, y1=y1, y2=y2),
     ]
     for m in m0_list:
         s.add_marker(m, permanent=True)
     with tempfile.TemporaryDirectory() as tmp:
         filename = tmp + '/testallmarkersfile.hdf5'
     s.save(filename)
     s1 = load(filename)
     markers_dict = s1.metadata.Markers
     m0_dict_list = []
     m1_dict_list = []
     for m in m0_list:
         m0_dict_list.append(san_dict(m._to_dictionary()))
         m1_dict_list.append(
             san_dict(markers_dict.get_item(m.name)._to_dictionary()))
     assert len(list(s1.metadata.Markers)) == 8
     for m0_dict, m1_dict in zip(m0_dict_list, m1_dict_list):
         assert m0_dict == m1_dict
예제 #9
0
 def test_get_one_string(self):
     s = Signal2D(np.zeros([3, 2, 2]))
     m = markers.text(x=list(range(3)), y=list(range(3)), text='one')
     m.axes_manager = s.axes_manager
     assert m.get_data_position('text') == 'one'
     s.axes_manager[0].index = 2
     assert m.get_data_position('text') == 'one'
예제 #10
0
 def test_save_load_permanent_marker_all_types(self):
     x1, y1, x2, y2 = 5, 2, 1, 8
     s = Signal2D(np.arange(100).reshape(10, 10))
     m0_list = [
         markers.point(x=x1, y=y1),
         markers.horizontal_line(y=y1),
         markers.horizontal_line_segment(x1=x1, x2=x2, y=y1),
         markers.line_segment(x1=x1, x2=x2, y1=y1, y2=y2),
         markers.rectangle(x1=x1, x2=x2, y1=y1, y2=y2),
         markers.text(x=x1, y=y1, text="test"),
         markers.vertical_line(x=x1),
         markers.vertical_line_segment(x=x1, y1=y1, y2=y2),
     ]
     for m in m0_list:
         s.add_marker(m, permanent=True)
     with tempfile.TemporaryDirectory() as tmp:
         filename = tmp + '/testallmarkersfile.hdf5'
     s.save(filename)
     s1 = load(filename)
     markers_dict = s1.metadata.Markers
     m0_dict_list = []
     m1_dict_list = []
     for m in m0_list:
         m0_dict_list.append(san_dict(m._to_dictionary()))
         m1_dict_list.append(
             san_dict(markers_dict.get_item(m.name)._to_dictionary()))
     assert len(list(s1.metadata.Markers)) == 8
     for m0_dict, m1_dict in zip(m0_dict_list, m1_dict_list):
         assert m0_dict == m1_dict
예제 #11
0
 def test_get_one_string(self):
     s = Signal2D(np.zeros([3, 2, 2]))
     m = markers.text(x=list(range(3)), y=list(range(3)), text='one')
     m.axes_manager = s.axes_manager
     nose.tools.assert_equal(m.get_data_position('text'), 'one')
     s.axes_manager[0].index = 2
     nose.tools.assert_equal(m.get_data_position('text'), 'one')
예제 #12
0
파일: eds.py 프로젝트: temcode/hyperspy
    def _add_xray_lines_markers(self, xray_lines):
        """
        Add marker on a spec.plot() with the name of the selected X-ray
        lines

        Parameters
        ----------
        xray_lines: list of string
            A valid list of X-ray lines
        """

        line_energy = []
        intensity = []
        for xray_line in xray_lines:
            element, line = utils_eds._get_element_and_line(xray_line)
            line_energy.append(self._get_line_energy(xray_line))
            relative_factor = elements_db[element][
                'Atomic_properties']['Xray_lines'][line]['weight']
            a_eng = self._get_line_energy(element + '_' + line[0] + 'a')
            intensity.append(self.isig[a_eng].data * relative_factor)
        for i in range(len(line_energy)):
            line = markers.vertical_line_segment(
                x=line_energy[i], y1=None, y2=intensity[i] * 0.8)
            self.add_marker(line)
            text = markers.text(
                x=line_energy[i], y=intensity[i] * 1.1, text=xray_lines[i],
                rotation=90)
            self.add_marker(text)
예제 #13
0
 def test_save_load_permanent_marker_all_types(self, tmp_path, file):
     filename = tmp_path / file
     s = self.s
     x1, y1, x2, y2 = 5, 2, 1, 8
     m0_list = [
         markers.point(x=x1, y=y1),
         markers.horizontal_line(y=y1),
         markers.horizontal_line_segment(x1=x1, x2=x2, y=y1),
         markers.line_segment(x1=x1, x2=x2, y1=y1, y2=y2),
         markers.rectangle(x1=x1, x2=x2, y1=y1, y2=y2),
         markers.text(x=x1, y=y1, text="test"),
         markers.vertical_line(x=x1),
         markers.vertical_line_segment(x=x1, y1=y1, y2=y2),
     ]
     for m in m0_list:
         s.add_marker(m, permanent=True)
     s.save(filename)
     s1 = load(filename)
     markers_dict = s1.metadata.Markers
     m0_dict_list = []
     m1_dict_list = []
     for m in m0_list:
         m0_dict_list.append(san_dict(m._to_dictionary()))
         m1_dict_list.append(
             san_dict(markers_dict.get_item(m.name)._to_dictionary()))
     assert len(list(s1.metadata.Markers)) == 8
     for m0_dict, m1_dict in zip(m0_dict_list, m1_dict_list):
         assert m0_dict == m1_dict
예제 #14
0
파일: eds.py 프로젝트: AakashV/hyperspy
    def add_xray_lines_markers(self, xray_lines):
        """
        Add marker on a spec.plot() with the name of the selected X-ray
        lines

        Parameters
        ----------
        xray_lines: list of string
            A valid list of X-ray lines
        """

        line_energy = []
        intensity = []
        for xray_line in xray_lines:
            element, line = utils_eds._get_element_and_line(xray_line)
            line_energy.append(self._get_line_energy(xray_line))
            relative_factor = elements_db[element][
                'Atomic_properties']['Xray_lines'][line]['weight']
            a_eng = self._get_line_energy(element + '_' + line[0] + 'a')
            intensity.append(self.isig[a_eng].data * relative_factor)
        for i in range(len(line_energy)):
            line = markers.vertical_line_segment(
                x=line_energy[i], y1=None, y2=intensity[i] * 0.8)
            self.add_marker(line)
            text = markers.text(
                x=line_energy[i], y=intensity[i] * 1.1, text=xray_lines[i],
                rotation=90)
            self.add_marker(text)
            self._xray_markers[xray_lines[i]] = [line, text]
            line.events.closed.connect(self._xray_marker_closed)
            text.events.closed.connect(self._xray_marker_closed)
예제 #15
0
def get_text_list(texts: Union[list, np.ndarray],
                  coordinates: Union[np.ndarray, list], **kwargs) -> list:
    """Return a list of text markers.

    Parameters
    ----------
    texts
        A list of texts.
    coordinates
        On the form [[x0, y0], [x1, y1], ...].
    kwargs
        Keyword arguments allowed by :func:`matplotlib.pyplot.axvline.`

    Returns
    -------
    marker_list : list
        List of :class:`hyperspy.drawing._markers.text.Text`.
    """
    coordinates = np.asarray(coordinates)
    if coordinates.ndim == 1:
        coordinates = coordinates[np.newaxis, ...]

    marker_list = []
    is_finite = np.isfinite(coordinates)[..., 0]
    coordinates[~is_finite] = -1
    for i in range(coordinates.shape[-2]):  # Iterate over zone axes
        if not np.allclose(coordinates[..., i, :], -1):  # All NaNs
            x = coordinates[..., i, 0]
            y = coordinates[..., i, 1]
            x[~is_finite[..., i]] = np.nan
            y[~is_finite[..., i]] = np.nan
            text_marker = text(x=x, y=y, text=texts[i], **kwargs)
            marker_list.append(text_marker)
    return marker_list
예제 #16
0
 def test_markers_properties(self):
     m = markers.text(x=1, y=2, text='a')
     m.set_marker_properties(fontsize=30, color='red')
     nose.tools.assert_true(m.marker_properties == {
         'color': 'red',
         'fontsize': 30
     })
예제 #17
0
 def test_get_one_string(self):
     s = Signal2D(np.zeros([3, 2, 2]))
     m = markers.text(x=list(range(3)),
                      y=list(range(3)),
                      text='one')
     m.axes_manager = s.axes_manager
     nose.tools.assert_equal(m.get_data_position('text'), 'one')
     s.axes_manager[0].index = 2
     nose.tools.assert_equal(m.get_data_position('text'), 'one')
예제 #18
0
 def test_iterate_strings(self):
     s = Signal2D(np.zeros([3, 2, 2]))
     m = markers.text(x=list(range(3)),
                      y=list(range(3)),
                      text=['one', 'two', 'three'])
     m.axes_manager = s.axes_manager
     assert m.get_data_position('text') == 'one'
     s.axes_manager[0].index = 2
     assert m.get_data_position('text') == 'three'
예제 #19
0
 def test_iterate_strings(self):
     s = Signal2D(np.zeros([3, 2, 2]))
     m = markers.text(x=list(range(3)),
                      y=list(range(3)),
                      text=['one', 'two', 'three'])
     m.axes_manager = s.axes_manager
     assert m.get_data_position('text') == 'one'
     s.axes_manager[0].index = 2
     assert m.get_data_position('text') == 'three'
예제 #20
0
 def test_get_one_string(self):
     s = Signal2D(np.zeros([3, 2, 2]))
     m = markers.text(x=list(range(3)),
                      y=list(range(3)),
                      text='one')
     m.axes_manager = s.axes_manager
     assert m.get_data_position('text') == 'one'
     s.axes_manager[0].index = 2
     assert m.get_data_position('text') == 'one'
예제 #21
0
    def test_dict2marker(self):
        m_point0 = markers.point(x=5, y=5)
        m_point1 = markers.point(x=(5, 10), y=(1, 5))
        m_line = markers.line_segment(x1=5, x2=10, y1=5, y2=10)
        m_vline = markers.vertical_line(x=5)
        m_vline_segment = markers.vertical_line_segment(x=4, y1=3, y2=6)
        m_hline = markers.horizontal_line(y=5)
        m_hline_segment = markers.horizontal_line_segment(x1=1, x2=9, y=5)
        m_rect = markers.rectangle(x1=1, x2=3, y1=5, y2=10)
        m_text = markers.text(x=1, y=5, text="test")

        m_point0_new = dict2marker(m_point0._to_dictionary(), m_point0.name)
        m_point1_new = dict2marker(m_point1._to_dictionary(), m_point1.name)
        m_line_new = dict2marker(m_line._to_dictionary(), m_line.name)
        m_vline_new = dict2marker(m_vline._to_dictionary(), m_vline.name)
        m_vline_segment_new = dict2marker(
            m_vline_segment._to_dictionary(), m_vline_segment.name)
        m_hline_new = dict2marker(m_hline._to_dictionary(), m_hline.name)
        m_hline_segment_new = dict2marker(
            m_hline_segment._to_dictionary(), m_hline_segment.name)
        m_rect_new = dict2marker(m_rect._to_dictionary(), m_rect.name)
        m_text_new = dict2marker(m_text._to_dictionary(), m_text.name)

        m_point0_dict = sanitize_dict(m_point0._to_dictionary())
        m_point1_dict = sanitize_dict(m_point1._to_dictionary())
        m_line_dict = sanitize_dict(m_line._to_dictionary())
        m_vline_dict = sanitize_dict(m_vline._to_dictionary())
        m_vline_segment_dict = sanitize_dict(m_vline_segment._to_dictionary())
        m_hline_dict = sanitize_dict(m_hline._to_dictionary())
        m_hline_segment_dict = sanitize_dict(m_hline_segment._to_dictionary())
        m_rect_dict = sanitize_dict(m_rect._to_dictionary())
        m_text_dict = sanitize_dict(m_text._to_dictionary())

        m_point0_new_dict = sanitize_dict(m_point0_new._to_dictionary())
        m_point1_new_dict = sanitize_dict(m_point1_new._to_dictionary())
        m_line_new_dict = sanitize_dict(m_line_new._to_dictionary())
        m_vline_new_dict = sanitize_dict(m_vline_new._to_dictionary())
        m_vline_segment_new_dict = sanitize_dict(
            m_vline_segment_new._to_dictionary())
        m_hline_new_dict = sanitize_dict(m_hline_new._to_dictionary())
        m_hline_segment_new_dict = sanitize_dict(
            m_hline_segment_new._to_dictionary())
        m_rect_new_dict = sanitize_dict(m_rect_new._to_dictionary())
        m_text_new_dict = sanitize_dict(m_text_new._to_dictionary())
        assert m_point0_dict == m_point0_new_dict
        assert m_point1_dict == m_point1_new_dict
        assert m_line_dict == m_line_new_dict
        assert m_vline_dict == m_vline_new_dict
        assert m_vline_segment_dict == m_vline_segment_new_dict
        assert m_hline_dict == m_hline_new_dict
        assert m_hline_segment_dict == m_hline_segment_new_dict
        assert m_rect_dict == m_rect_new_dict
        assert m_text_dict == m_text_new_dict
예제 #22
0
def get_text_list(
    texts: Union[list, np.ndarray],
    coordinates: Union[np.ndarray, list],
    **kwargs,
) -> list:
    """Return a list of text markers.

    Parameters
    ----------
    texts
        A list of texts.
    coordinates
        On the form [[x0, y0], [x1, y1], ...].
    kwargs
        Keyword arguments allowed by :func:`matplotlib.pyplot.axvline.`

    Returns
    -------
    marker_list : list
        List of :class:`hyperspy.drawing._markers.text.Text`.
    """
    coordinates = np.asarray(coordinates)
    if coordinates.ndim == 1:
        coordinates = coordinates[np.newaxis, ...]

    marker_list = []
    is_finite = np.isfinite(coordinates)[..., 0]
    coordinates[~is_finite] = -1
    for i in range(coordinates.shape[-2]):  # Iterate over zone axes
        if not np.allclose(coordinates[..., i, :], -1):  # All NaNs
            x = coordinates[..., i, 0]
            y = coordinates[..., i, 1]
            x[~is_finite[..., i]] = np.nan
            y[~is_finite[..., i]] = np.nan
            text_marker = text(
                x=x,
                y=y,
                text=texts[i],
                **kwargs,
            )
            # TODO: Pass "visible" parameter to text() when HyperSpy allows
            #  it (merges this PR
            #  https://github.com/hyperspy/hyperspy/pull/2558 and publishes
            #  a minor release with that update)
            # text_marker = text(
            #     x=coordinates[..., i, 0],
            #     y=coordinates[..., i, 1],
            #     text=texts[i],
            #     visible=is_finite[..., i],
            #     **kwargs
            # )
            marker_list.append(text_marker)
    return marker_list
예제 #23
0
def test_markers_auto_update():
    # test data for fixed marker
    pos = [1, 2, 3, 4]
    # test data for auto_update marker
    pos_list = np.array([[1, 3, 5], [2, 4, 6]])
    pos_2d = [pos_list + pos[i] for i in range(4)]

    s = Signal2D(np.arange(2 * 3 * 4 * 5).reshape(2, 3, 4, 5))
    marker_list = []
    for _auto_update, _pos in [(False, pos), (True, pos_2d)]:
        _markers = [
            markers.vertical_line(_pos[0]),
            markers.horizontal_line(_pos[0]),
            markers.vertical_line_segment(*(_pos[0:3])),
            markers.horizontal_line_segment(*(_pos[0:3])),
            markers.rectangle(*_pos),
            markers.ellipse(*_pos),
            markers.arrow(*_pos),
            markers.line_segment(*_pos),
            markers.point(_pos[0], _pos[1]),
            markers.text(_pos[0], _pos[1], "test"),
        ]
        for marker in _markers:
            assert marker.auto_update is _auto_update
        marker_list += _markers
    assert len(marker_list) == 20
    s.add_marker(marker_list)
    for iy, temp_marker_list in enumerate(pos_list):
        for ix, value in enumerate(temp_marker_list):
            s.axes_manager.indices = (ix, iy)
            for marker in marker_list:
                _xy = [marker.get_data_position(ax) for ax in ('x1','y1','x2','y2')]
                if marker.auto_update is False:
                    _xy2 = pos
                else:
                    _xy2 = [pos_2d[i][iy, ix] for i in range(4)]
                _name = marker.name
                if marker.auto_update is False:
                    if _name == 'vertical_line':
                        assert _xy2[0] == _xy[0]
                    elif _name == 'horizontal_line':
                        assert _xy2[0] == _xy[1]
                    elif _name == 'vertical_line_segment':
                        assert _xy2[0:3] == [_xy[i] for i in (0,1,3)]
                    elif _name == 'horizontal_line_segment':
                        assert _xy2[0:3] == [_xy[i] for i in (0,2,1)]
                    elif _name in ('rectangle', 'ellipse', 'arrow', 'line_segment'):
                        assert _xy2 == _xy
                    elif _name in ('point', 'text'):
                        assert _xy2[0:2] == _xy[0:2]
                    else:
                        raise ValueError('Unknown marker : ' + _name)
예제 #24
0
 def test_save_load_text_marker(self, tmp_path, file):
     filename = tmp_path / file
     s = self.s
     x, y = 3, 9.5
     color = 'brown'
     name = "text_test"
     text = "a text"
     m = markers.text(x=x, y=y, text=text, color=color)
     m.name = name
     s.add_marker(m, permanent=True)
     s.save(filename)
     s1 = load(filename)
     m1 = s1.metadata.Markers.get_item(name)
     assert san_dict(m1._to_dictionary()) == san_dict(m._to_dictionary())
예제 #25
0
 def test_save_load_text_marker(self, mpl_cleanup):
     x, y = 3, 9.5
     color = 'brown'
     name = "text_test"
     text = "a text"
     s = Signal2D(np.arange(100).reshape(10, 10))
     m = markers.text(x=x, y=y, text=text, color=color)
     m.name = name
     s.add_marker(m, permanent=True)
     with tempfile.TemporaryDirectory() as tmp:
         filename = tmp + '/test_save_text_marker.hdf5'
     s.save(filename)
     s1 = load(filename)
     m1 = s1.metadata.Markers.get_item(name)
     assert san_dict(m1._to_dictionary()) == san_dict(m._to_dictionary())
예제 #26
0
def test_plot_markers_zorder(reversed_order):
    s = Signal2D(np.full((10,10),20))
    s.axes_manager[0].name='x'
    s.axes_manager[0].scale=10
    s.axes_manager[1].scale=10
    s.plot()

    marker_list = [
        markers.rectangle(35, 45, 65, 75, edgecolor="yellow", facecolor="cyan", zorder=3),
        markers.text(10, 20, "Text", color="white", size=30, zorder=4),
        markers.ellipse(40, 60, 30, 25, edgecolor='white', facecolor='red', linewidth=4, zorder=8),
        markers.arrow(10, 10, 50, 50, arrowstyle='<|-|>', edgecolor='white', facecolor='red', linewidth=1, shrinkA=2, shrinkB=2, zorder=8.5),
        markers.arrow(10, 15, 50, 60, arrowstyle='<->', edgecolor='red', facecolor='red', linewidth=3, shrinkA=2, shrinkB=2, zorder=2.8),
        markers.rectangle(10, 20, 60, 70, edgecolor="red", facecolor="green", fill=True, zorder=2.7),
        markers.text(50, 60, "Text", color="white", backgroundcolor="blue", size=40, zorder=6.6),
        markers.ellipse(70, 40, 30, 25, edgecolor='blue', facecolor='red', fill=True, linewidth=4, zorder=7.5),
        markers.line_segment(50, 10, 40, 80, color='cyan', linewidth=3, zorder=3.2),
    ]

    if reversed_order:
        marker_list.reverse()
    s.add_marker(marker_list)

    return s._plot.signal_plot.figure
예제 #27
0
 def test_save_load_text_marker(self):
     x, y = 3, 9.5
     color = 'brown'
     name = "text_test"
     text = "a text"
     s = Signal2D(np.arange(100).reshape(10, 10))
     m = markers.text(
         x=x, y=y, text=text, color=color)
     m.name = name
     s.add_marker(m, permanent=True)
     with tempfile.TemporaryDirectory() as tmp:
         filename = tmp + '/test_save_text_marker.hdf5'
     s.save(filename)
     s1 = load(filename)
     m1 = s1.metadata.Markers.get_item(name)
     assert san_dict(m1._to_dictionary()) == san_dict(m._to_dictionary())
예제 #28
0
    def _estimate_textbox_dimension(self, dummy_text='My_g8'):
        # get the dimension of a typical textbox in the current figure
        dummy_style = copy.deepcopy(self.edge_label_style)
        dummy_style['bbox']['alpha'] = 0
        dummy_style['alpha'] = 0
        tx = markers.text(x=(self.axis.low_value + self.axis.high_value) / 2,
                          y=(self.smin + self.smax) / 2,
                          text=self._text_parser(dummy_text),
                          **dummy_style)
        self.signal.add_marker(tx)

        dummybb = self._get_bbox_from_text_artist(tx.marker)
        tx.close()

        text_width = dummybb.width
        text_height = dummybb.height

        return text_width, text_height
예제 #29
0
    def get_markers(self, labels):
        '''Get the markers (vertical line segment and text box) for labelling
        the edges

        Parameters
        ----------
        labels : dictionary
            A dictionary with the labels as keys and their energies as values.
            E.g. for EELS edges it could be {'Mn_L2': 651.0, 'Cr_L3': 575.0}.

        Returns
        -------
        vls : list
            A list contains HyperSpy's vertical line segment marker
        txs : list
            A list contains HyperSpy's text marker
        '''

        xytext = self._get_textbox_pos(labels)

        vls = []
        txs = []
        for xyt in xytext:
            vl = markers.vertical_line_segment(x=xyt[0],
                                               y1=xyt[1],
                                               y2=xyt[2],
                                               color=xyt[4])
            tx = markers.text(x=xyt[0],
                              y=xyt[1],
                              text=self._text_parser(xyt[3]),
                              color=xyt[4],
                              **self.edge_label_style)

            vl.events.closed.connect(self.signal._edge_marker_closed)
            tx.events.closed.connect(self.signal._edge_marker_closed)
            vl.auto_update = True
            tx.auto_update = True

            vls.append(vl)
            txs.append(tx)

        return vls, txs
예제 #30
0
def test_iterate_markers():
    from skimage.feature import peak_local_max
    import scipy.misc
    ims = BaseSignal(scipy.misc.face()).as_signal2D([1, 2])
    index = np.array([peak_local_max(im.data, min_distance=100,
                                     num_peaks=4) for im in ims])
    # Add multiple markers
    for i in range(4):
        xs = index[:, i, 1]
        ys = index[:, i, 0]
        m = markers.point(x=xs, y=ys, color='red')
        ims.add_marker(m, plot_marker=True, permanent=True)
        m = markers.text(x=10 + xs, y=10 + ys, text=str(i), color='k')
        ims.add_marker(m, plot_marker=True, permanent=True)
    xs = index[:, :, 1]
    ys = index[:, :, 0]
    x1 = np.min(xs, 1)
    y1 = np.min(ys, 1)
    x2 = np.max(xs, 1)
    y2 = np.max(ys, 1)
    m = markers.rectangle(x1, y1, x2, y2, color='green')
    ims.add_marker(m, plot_marker=True, permanent=True)
    m = markers.arrow(x1, y1, x2, y2, arrowstyle='<->',edgecolor='red')
    ims.add_marker(m, plot_marker=True, permanent=True)
    m = markers.ellipse((x1+x2)/2, (y1+y2)/2, x2-x1, y2-y1,
                      edgecolor='yellow')
    ims.add_marker(m, plot_marker=True, permanent=True)

    for im in ims:
        m_original = ims.metadata.Markers
        m_iterated = im.metadata.Markers
        for key in m_original.keys():
            mo = m_original[key]
            mi = m_iterated[key]
            assert mo.__class__.__name__ == mi.__class__.__name__
            assert mo.name == mi.name
            assert mo.get_data_position('x1') == mi.get_data_position('x1')
            assert mo.get_data_position('y1') == mi.get_data_position('y1')
            assert mo.get_data_position('text') == mi.get_data_position('text')
            for propkey in mo.marker_properties:
                assert mo.marker_properties[propkey] == \
                    mi.marker_properties[propkey]
예제 #31
0
 def test_add_several_permanent_markers(self, mpl_cleanup):
     s = Signal1D(np.arange(10))
     m_point = markers.point(x=5, y=5)
     m_line = markers.line_segment(x1=5, x2=10, y1=5, y2=10)
     m_vline = markers.vertical_line(x=5)
     m_vline_segment = markers.vertical_line_segment(x=4, y1=3, y2=6)
     m_hline = markers.horizontal_line(y=5)
     m_hline_segment = markers.horizontal_line_segment(x1=1, x2=9, y=5)
     m_rect = markers.rectangle(x1=1, x2=3, y1=5, y2=10)
     m_text = markers.text(x=1, y=5, text="test")
     s.add_marker(m_point, permanent=True)
     s.add_marker(m_line, permanent=True)
     s.add_marker(m_vline, permanent=True)
     s.add_marker(m_vline_segment, permanent=True)
     s.add_marker(m_hline, permanent=True)
     s.add_marker(m_hline_segment, permanent=True)
     s.add_marker(m_rect, permanent=True)
     s.add_marker(m_text, permanent=True)
     assert len(list(s.metadata.Markers)) == 8
     with pytest.raises(ValueError):
         s.add_marker(m_rect, permanent=True)
예제 #32
0
 def test_add_several_permanent_markers(self):
     s = Signal1D(np.arange(10))
     m_point = markers.point(x=5, y=5)
     m_line = markers.line_segment(x1=5, x2=10, y1=5, y2=10)
     m_vline = markers.vertical_line(x=5)
     m_vline_segment = markers.vertical_line_segment(x=4, y1=3, y2=6)
     m_hline = markers.horizontal_line(y=5)
     m_hline_segment = markers.horizontal_line_segment(x1=1, x2=9, y=5)
     m_rect = markers.rectangle(x1=1, x2=3, y1=5, y2=10)
     m_text = markers.text(x=1, y=5, text="test")
     s.add_marker(m_point, permanent=True)
     s.add_marker(m_line, permanent=True)
     s.add_marker(m_vline, permanent=True)
     s.add_marker(m_vline_segment, permanent=True)
     s.add_marker(m_hline, permanent=True)
     s.add_marker(m_hline_segment, permanent=True)
     s.add_marker(m_rect, permanent=True)
     s.add_marker(m_text, permanent=True)
     assert len(list(s.metadata.Markers)) == 8
     with pytest.raises(ValueError):
         s.add_marker(m_rect, permanent=True)
예제 #33
0
    def regression(self, roi, signal=None, axes=None):
        if signal is None:
            f = self.reg_tool.widget.ax.figure
            window = f.canvas.parent()
            sw = window.property('hyperspyUI.SignalWrapper')
            if sw is None:
                return
            signal = sw.signal
        sig_axes = signal.axes_manager._axes
        if axes is None:
            axes = self.reg_tool.axes
        else:
            axes = sig_axes[axes]

        i_ax = sig_axes.index(axes[0])
        slices = list(roi._make_slices(sig_axes, axes))
        for i, a in enumerate(sig_axes):
            if i != i_ax:
                slices[i] = a.index

        y = signal.data[slices]
        x = axes[0].axis[slices[i_ax]]

        # TODO: If in signal dim, iterate through navigation space
        reg = stats.linregress(x, y)
        x1, x2 = np.min(x), np.max(x)
        y1, y2 = np.array([x1, x2]) * reg[0] + reg[1]
        m_l = line_segment(x1, y1, x2, y2)
        signal.add_marker(m_l)
        m_t = text((x2+x1)*0.5, (y2+y1)*0.5,
                   "y = %.4gx + %.4g, R=%.4g" % reg[0:3])
        signal.add_marker(m_t)

        self.record_code("signal = ui.get_selected_signal()")
        self.record_code("axes = " +
                         str(tuple([sig_axes.index(a) for a in axes])))
        self.record_code("roi = utils.roi." + str(roi))
        self.record_code("<p>.regression(roi, signal, axes)")
        self.reg_tool.cancel()   # Turn off functionality as we are finished
예제 #34
0
파일: markers.py 프로젝트: kvmani/kikuchipy
def get_text_list(texts: list, coordinates: np.ndarray, **kwargs) -> list:
    """Return a list of text markers.

    Parameters
    ----------
    texts :
        A list of texts.
    coordinates :
        On the form [[x0, y0], [x1, y1], ...].
    kwargs :
        Keyword arguments allowed by :class:`matplotlib.pyplot.axvline.`

    Returns
    -------
    marker_list :
        List of :class:`hyperspy.utils.markers.text`.
    """
    coordinates = np.atleast_2d(coordinates)
    return [
        text(x=x, y=y, text=t, **kwargs)
        for t, (x, y) in zip(texts, coordinates)
    ]
예제 #35
0
    def regression(self, roi, signal=None, axes=None):
        if signal is None:
            f = self.reg_tool.widget.ax.figure
            window = f.canvas.parent()
            sw = window.property('hyperspyUI.SignalWrapper')
            if sw is None:
                return
            signal = sw.signal
        sig_axes = signal.axes_manager._axes
        if axes is None:
            axes = self.reg_tool.axes
        else:
            axes = sig_axes[axes]

        i_ax = sig_axes.index(axes[0])
        slices = list(roi._make_slices(sig_axes, axes))
        for i, a in enumerate(sig_axes):
            if i != i_ax:
                slices[i] = a.index

        y = signal.data[slices]
        x = axes[0].axis[slices[i_ax]]

        # TODO: If in signal dim, iterate through navigation space
        reg = stats.linregress(x, y)
        x1, x2 = np.min(x), np.max(x)
        y1, y2 = np.array([x1, x2]) * reg[0] + reg[1]
        m_l = line_segment(x1, y1, x2, y2)
        signal.add_marker(m_l)
        m_t = text((x2 + x1) * 0.5, (y2 + y1) * 0.5,
                   "y = %.4gx + %.4g, R=%.4g" % reg[0:3])
        signal.add_marker(m_t)

        self.record_code("signal = ui.get_selected_signal()")
        self.record_code("axes = " +
                         str(tuple([sig_axes.index(a) for a in axes])))
        self.record_code("roi = utils.roi." + str(roi))
        self.record_code("<p>.regression(roi, signal, axes)")
        self.reg_tool.cancel()  # Turn off functionality as we are finished
예제 #36
0
def test_iterate_markers():
    from skimage.feature import peak_local_max
    import scipy.misc
    ims = BaseSignal(scipy.misc.face()).as_signal2D([1, 2])
    index = np.array([peak_local_max(im.data, min_distance=100,
                                     num_peaks=4) for im in ims])
    # Add multiple markers
    for i in range(4):
        xs = index[:, i, 1]
        ys = index[:, i, 0]
        m = markers.point(x=xs, y=ys, color='red')
        ims.add_marker(m, plot_marker=True, permanent=True)
        m = markers.text(x=10 + xs, y=10 + ys, text=str(i), color='k')
        ims.add_marker(m, plot_marker=True, permanent=True)
    xs = index[:, :, 1]
    ys = index[:, :, 0]
    m = markers.rectangle(np.min(xs, 1),
                          np.min(ys, 1),
                          np.max(xs, 1),
                          np.max(ys, 1),
                          color='green')
    ims.add_marker(m, plot_marker=True, permanent=True)

    for im in ims:
        m_original = ims.metadata.Markers
        m_iterated = im.metadata.Markers
        for key in m_original.keys():
            mo = m_original[key]
            mi = m_iterated[key]
            assert mo.__class__.__name__ == mi.__class__.__name__
            assert mo.name == mi.name
            assert mo.get_data_position('x1') == mi.get_data_position('x1')
            assert mo.get_data_position('y1') == mi.get_data_position('y1')
            assert mo.get_data_position('text') == mi.get_data_position('text')
            assert mo.marker_properties['color'] == \
                mi.marker_properties['color']
예제 #37
0
 def test_markers_properties(self):
     m = markers.text(x=1, y=2, text='a')
     m.set_marker_properties(fontsize=30, color='red')
     nose.tools.assert_dict_equal(m.marker_properties,
                                  {'color': 'red', 'fontsize': 30})
예제 #38
0
 def test_markers_properties(self):
     m = markers.text(x=1, y=2, text='a')
     m.set_marker_properties(fontsize=30, color='red')
     assert (m.marker_properties ==
             {'color': 'red', 'fontsize': 30})