Skip to content

Commit 8220f15

Browse files
committed
MNT: Prevent users from erroneously using legend label API on Axis
Closes #27971. For a complete explanation see #27971 (comment)
1 parent fe6389f commit 8220f15

File tree

7 files changed

+31
-18
lines changed

7 files changed

+31
-18
lines changed

galleries/examples/axes_grid1/parasite_simple.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
host.legend(labelcolor="linecolor")
2222

23-
host.yaxis.get_label().set_color(p1.get_color())
24-
par.yaxis.get_label().set_color(p2.get_color())
23+
host.yaxis.label.set_color(p1.get_color())
24+
par.yaxis.label.set_color(p2.get_color())
2525

2626
plt.show()

lib/matplotlib/axes/_base.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -777,8 +777,8 @@ def __repr__(self):
777777
if titles:
778778
fields += [f"title={titles}"]
779779
for name, axis in self._axis_map.items():
780-
if axis.get_label() and axis.get_label().get_text():
781-
fields += [f"{name}label={axis.get_label().get_text()!r}"]
780+
if axis.label and axis.label.get_text():
781+
fields += [f"{name}label={axis.label.get_text()!r}"]
782782
return f"<{self.__class__.__name__}: " + ", ".join(fields) + ">"
783783

784784
def get_subplotspec(self):
@@ -3517,7 +3517,7 @@ def get_xlabel(self):
35173517
"""
35183518
Get the xlabel text string.
35193519
"""
3520-
label = self.xaxis.get_label()
3520+
label = self.xaxis.label
35213521
return label.get_text()
35223522

35233523
def set_xlabel(self, xlabel, fontdict=None, labelpad=None, *,
@@ -3770,7 +3770,7 @@ def get_ylabel(self):
37703770
"""
37713771
Get the ylabel text string.
37723772
"""
3773-
label = self.yaxis.get_label()
3773+
label = self.yaxis.label
37743774
return label.get_text()
37753775

37763776
def set_ylabel(self, ylabel, fontdict=None, labelpad=None, *,

lib/matplotlib/axis.py

+14-1
Original file line numberDiff line numberDiff line change
@@ -1421,8 +1421,21 @@ def get_gridlines(self):
14211421
return cbook.silent_list('Line2D gridline',
14221422
[tick.gridline for tick in ticks])
14231423

1424+
def set_label(self, s):
1425+
"""Assigning legend labels is supported. Raises RuntimeError."""
1426+
raise RuntimeError(
1427+
"A legend label cannot be assigned to an Axis. Did you mean to "
1428+
"set the axis label via set_label_text()?")
1429+
14241430
def get_label(self):
1425-
"""Return the axis label as a Text instance."""
1431+
"""
1432+
Return the axis label as a Text instance.
1433+
1434+
.. admonition:: Discouraged
1435+
1436+
This overrides `.Artist.get_label`, which is for legend labels, with a new
1437+
semantic. It is recommended to use the attribute ``Axis.label`` instead.
1438+
"""
14261439
return self.label
14271440

14281441
def get_offset_text(self):

lib/matplotlib/backends/qt_editor/figureoptions.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ def convert_limits(lim, converter):
5454
(None, f"<b>{name.title()}-Axis</b>"),
5555
('Min', axis_limits[name][0]),
5656
('Max', axis_limits[name][1]),
57-
('Label', axis.get_label().get_text()),
57+
('Label', axis.label.get_text()),
5858
('Scale', [axis.get_scale(),
5959
'linear', 'log', 'symlog', 'logit']),
6060
sep,

lib/matplotlib/tests/test_axes.py

+7-7
Original file line numberDiff line numberDiff line change
@@ -136,20 +136,20 @@ def test_label_shift():
136136
# Test label re-centering on x-axis
137137
ax.set_xlabel("Test label", loc="left")
138138
ax.set_xlabel("Test label", loc="center")
139-
assert ax.xaxis.get_label().get_horizontalalignment() == "center"
139+
assert ax.xaxis.label.get_horizontalalignment() == "center"
140140
ax.set_xlabel("Test label", loc="right")
141-
assert ax.xaxis.get_label().get_horizontalalignment() == "right"
141+
assert ax.xaxis.label.get_horizontalalignment() == "right"
142142
ax.set_xlabel("Test label", loc="center")
143-
assert ax.xaxis.get_label().get_horizontalalignment() == "center"
143+
assert ax.xaxis.label.get_horizontalalignment() == "center"
144144

145145
# Test label re-centering on y-axis
146146
ax.set_ylabel("Test label", loc="top")
147147
ax.set_ylabel("Test label", loc="center")
148-
assert ax.yaxis.get_label().get_horizontalalignment() == "center"
148+
assert ax.yaxis.label.get_horizontalalignment() == "center"
149149
ax.set_ylabel("Test label", loc="bottom")
150-
assert ax.yaxis.get_label().get_horizontalalignment() == "left"
150+
assert ax.yaxis.label.get_horizontalalignment() == "left"
151151
ax.set_ylabel("Test label", loc="center")
152-
assert ax.yaxis.get_label().get_horizontalalignment() == "center"
152+
assert ax.yaxis.label.get_horizontalalignment() == "center"
153153

154154

155155
@check_figures_equal(extensions=["png"])
@@ -8421,7 +8421,7 @@ def test_ylabel_ha_with_position(ha):
84218421
ax = fig.subplots()
84228422
ax.set_ylabel("test", y=1, ha=ha)
84238423
ax.yaxis.set_label_position("right")
8424-
assert ax.yaxis.get_label().get_ha() == ha
8424+
assert ax.yaxis.label.get_ha() == ha
84258425

84268426

84278427
def test_bar_label_location_vertical():

lib/mpl_toolkits/axisartist/axis_artist.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -312,13 +312,13 @@ def get_pad(self):
312312

313313
def get_ref_artist(self):
314314
# docstring inherited
315-
return self._axis.get_label()
315+
return self._axis.label
316316

317317
def get_text(self):
318318
# docstring inherited
319319
t = super().get_text()
320320
if t == "__from_axes__":
321-
return self._axis.get_label().get_text()
321+
return self._axis.label.get_text()
322322
return self._text
323323

324324
_default_alignments = dict(left=("bottom", "center"),

lib/mpl_toolkits/mplot3d/axes3d.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1801,7 +1801,7 @@ def get_zlabel(self):
18011801
"""
18021802
Get the z-label text string.
18031803
"""
1804-
label = self.zaxis.get_label()
1804+
label = self.zaxis.label
18051805
return label.get_text()
18061806

18071807
# Axes rectangle characteristics

0 commit comments

Comments
 (0)