Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 976823e

Browse filesBrowse files
committed
MarkerStyle is considered immutable
1 parent 408b1ab commit 976823e
Copy full SHA for 976823e

File tree

Expand file treeCollapse file tree

4 files changed

+56
-23
lines changed
Filter options
Expand file treeCollapse file tree

4 files changed

+56
-23
lines changed
+5Lines changed: 5 additions & 0 deletions
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

Copy file name to clipboardExpand all lines: lib/matplotlib/lines.py
+5-4Lines changed: 5 additions & 4 deletions
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

Copy file name to clipboardExpand all lines: lib/matplotlib/markers.py
+13-2Lines changed: 13 additions & 2 deletions
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

Copy file name to clipboardExpand all lines: lib/matplotlib/tests/test_marker.py
+33-17Lines changed: 33 additions & 17 deletions
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 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.