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 f78e8ec

Browse filesBrowse files
Backport PR #25196: Add deprecation for setting data with non sequence type in Line2D (#25201)
Co-authored-by: Oscar Gustafsson <oscar.gustafsson@gmail.com>
1 parent 172ede3 commit f78e8ec
Copy full SHA for f78e8ec

File tree

3 files changed

+26
-4
lines changed
Filter options

3 files changed

+26
-4
lines changed
+4Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
``Line2D``
2+
~~~~~~~~~~
3+
When creating a Line2D or using `.Line2D.set_xdata` and `.Line2D.set_ydata`,
4+
passing x/y data as non sequence is deprecated.

‎lib/matplotlib/lines.py

Copy file name to clipboardExpand all lines: lib/matplotlib/lines.py
+16-2Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1275,7 +1275,14 @@ def set_xdata(self, x):
12751275
x : 1D array
12761276
"""
12771277
if not np.iterable(x):
1278-
raise RuntimeError('x must be a sequence')
1278+
# When deprecation cycle is completed
1279+
# raise RuntimeError('x must be a sequence')
1280+
_api.warn_deprecated(
1281+
since=3.7,
1282+
message="Setting data with a non sequence type "
1283+
"is deprecated since %(since)s and will be "
1284+
"remove %(removal)s")
1285+
x = [x, ]
12791286
self._xorig = copy.copy(x)
12801287
self._invalidx = True
12811288
self.stale = True
@@ -1289,7 +1296,14 @@ def set_ydata(self, y):
12891296
y : 1D array
12901297
"""
12911298
if not np.iterable(y):
1292-
raise RuntimeError('y must be a sequence')
1299+
# When deprecation cycle is completed
1300+
# raise RuntimeError('y must be a sequence')
1301+
_api.warn_deprecated(
1302+
since=3.7,
1303+
message="Setting data with a non sequence type "
1304+
"is deprecated since %(since)s and will be "
1305+
"remove %(removal)s")
1306+
y = [y, ]
12931307
self._yorig = copy.copy(y)
12941308
self._invalidy = True
12951309
self.stale = True

‎lib/matplotlib/tests/test_lines.py

Copy file name to clipboardExpand all lines: lib/matplotlib/tests/test_lines.py
+6-2Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import matplotlib.pyplot as plt
2121
import matplotlib.transforms as mtransforms
2222
from matplotlib.testing.decorators import image_comparison, check_figures_equal
23+
from matplotlib._api.deprecation import MatplotlibDeprecationWarning
2324

2425

2526
def test_segment_hits():
@@ -91,9 +92,12 @@ def test_invalid_line_data():
9192
mlines.Line2D([], 1)
9293

9394
line = mlines.Line2D([], [])
94-
with pytest.raises(RuntimeError, match='x must be'):
95+
# when deprecation cycle is completed
96+
# with pytest.raises(RuntimeError, match='x must be'):
97+
with pytest.warns(MatplotlibDeprecationWarning):
9598
line.set_xdata(0)
96-
with pytest.raises(RuntimeError, match='y must be'):
99+
# with pytest.raises(RuntimeError, match='y must be'):
100+
with pytest.warns(MatplotlibDeprecationWarning):
97101
line.set_ydata(0)
98102

99103

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.