Skip to content

Commit 976823e

Browse files
committed
MarkerStyle is considered immutable
1 parent 408b1ab commit 976823e

File tree

4 files changed

+56
-23
lines changed

4 files changed

+56
-23
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
``MarkerStyle`` is considered immutable
2+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3+
``MarkerStyle.set_fillstyle()`` and ``MarkerStyle.set_marker()`` are
4+
deprecated. Create a new ``MarkerStyle`` with the respective parameters
5+
instead.

lib/matplotlib/lines.py

+5-4
Original file line numberDiff line numberDiff line change
@@ -534,7 +534,7 @@ def set_fillstyle(self, fs):
534534
535535
For examples see :ref:`marker_fill_styles`.
536536
"""
537-
self._marker.set_fillstyle(fs)
537+
self.set_marker(MarkerStyle(self._marker.get_marker(), fs))
538538
self.stale = True
539539

540540
def set_markevery(self, every):
@@ -930,7 +930,8 @@ def get_markeredgecolor(self):
930930
if rcParams['_internal.classic_mode']:
931931
if self._marker.get_marker() in ('.', ','):
932932
return self._color
933-
if self._marker.is_filled() and self.get_fillstyle() != 'none':
933+
if (self._marker.is_filled()
934+
and self._marker.get_fillstyle() != 'none'):
934935
return 'k' # Bad hard-wired default...
935936
return self._color
936937
else:
@@ -945,7 +946,7 @@ def get_markeredgewidth(self):
945946
return self._markeredgewidth
946947

947948
def _get_markerfacecolor(self, alt=False):
948-
if self.get_fillstyle() == 'none':
949+
if self._marker.get_fillstyle() == 'none':
949950
return 'none'
950951
fc = self._markerfacecoloralt if alt else self._markerfacecolor
951952
if cbook._str_lower_equal(fc, 'auto'):
@@ -1166,7 +1167,7 @@ def set_marker(self, marker):
11661167
See `~matplotlib.markers` for full description of possible
11671168
arguments.
11681169
"""
1169-
self._marker.set_marker(marker)
1170+
self._marker = MarkerStyle(marker, self._marker.get_fillstyle())
11701171
self.stale = True
11711172

11721173
def set_markeredgecolor(self, ec):

lib/matplotlib/markers.py

+13-2
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,9 @@ class MarkerStyle:
147147
"""
148148
A class representing marker types.
149149
150+
Instances are immutable. If you need to change anything, create a new
151+
instance.
152+
150153
Attributes
151154
----------
152155
markers : list
@@ -228,8 +231,8 @@ def __init__(self, marker=None, fillstyle=None):
228231
One of 'full', 'left', 'right', 'bottom', 'top', 'none'.
229232
"""
230233
self._marker_function = None
231-
self.set_fillstyle(fillstyle)
232-
self.set_marker(marker)
234+
self._set_fillstyle(fillstyle)
235+
self._set_marker(marker)
233236

234237
def _recache(self):
235238
if self._marker_function is None:
@@ -256,7 +259,11 @@ def is_filled(self):
256259
def get_fillstyle(self):
257260
return self._fillstyle
258261

262+
@_api.deprecated("3.4", alternative="a new marker")
259263
def set_fillstyle(self, fillstyle):
264+
return self._set_fillstyle(fillstyle)
265+
266+
def _set_fillstyle(self, fillstyle):
260267
"""
261268
Set the fillstyle.
262269
@@ -281,7 +288,11 @@ def get_capstyle(self):
281288
def get_marker(self):
282289
return self._marker
283290

291+
@_api.deprecated("3.4", alternative="a new marker")
284292
def set_marker(self, marker):
293+
return self._set_marker(marker)
294+
295+
def _set_marker(self, marker):
285296
"""
286297
Set the marker.
287298

lib/matplotlib/tests/test_marker.py

+33-17
Original file line numberDiff line numberDiff line change
@@ -13,27 +13,43 @@ def test_marker_fillstyle():
1313
assert not marker_style.is_filled()
1414

1515

16-
def test_markers_valid():
17-
marker_style = markers.MarkerStyle()
18-
mrk_array = np.array([[-0.5, 0],
19-
[0.5, 0]])
16+
@pytest.mark.parametrize('marker', [
17+
'o',
18+
'x',
19+
'',
20+
'None',
21+
None,
22+
r'$\frac{1}{2}$',
23+
"$\u266B$",
24+
1,
25+
markers.TICKLEFT,
26+
[[-1, 0], [1, 0]],
27+
np.array([[-1, 0], [1, 0]]),
28+
Path([[0, 0], [1, 0]], [Path.MOVETO, Path.LINETO]),
29+
(5, 0), # a pentagon
30+
(7, 1), # a 7-pointed star
31+
(5, 2), # asterisk
32+
(5, 0, 10), # a pentagon, rotated by 10 degrees
33+
(7, 1, 10), # a 7-pointed star, rotated by 10 degrees
34+
(5, 2, 10), # asterisk, rotated by 10 degrees
35+
markers.MarkerStyle(),
36+
markers.MarkerStyle('o'),
37+
])
38+
def test_markers_valid(marker):
2039
# Checking this doesn't fail.
21-
marker_style.set_marker(mrk_array)
40+
markers.MarkerStyle(marker)
2241

2342

24-
def test_markers_invalid():
25-
marker_style = markers.MarkerStyle()
26-
mrk_array = np.array([[-0.5, 0, 1, 2, 3]])
27-
# Checking this does fail.
43+
@pytest.mark.parametrize('marker', [
44+
'square', # arbitrary string
45+
np.array([[-0.5, 0, 1, 2, 3]]), # 1D array
46+
(1,),
47+
(5, 3), # second parameter of tuple must be 0, 1, or 2
48+
(1, 2, 3, 4),
49+
])
50+
def test_markers_invalid(marker):
2851
with pytest.raises(ValueError):
29-
marker_style.set_marker(mrk_array)
30-
31-
32-
def test_marker_path():
33-
marker_style = markers.MarkerStyle()
34-
path = Path([[0, 0], [1, 0]], [Path.MOVETO, Path.LINETO])
35-
# Checking this doesn't fail.
36-
marker_style.set_marker(path)
52+
markers.MarkerStyle(marker)
3753

3854

3955
class UnsnappedMarkerStyle(markers.MarkerStyle):

0 commit comments

Comments
 (0)