8000 Add Quiverkey zorder option (#28354) · matplotlib/matplotlib@f50efa5 · GitHub
[go: up one dir, main page]

Skip to content

Commit f50efa5

Browse files
muchojptimhoffmQuLogic
authored
Add Quiverkey zorder option (#28354)
* add zorder option in QuiverKey modify docstring add zorder test Add new api changes doc * fix typo in docstring Co-authored-by: Tim Hoffmann <2836374+timhoffm@users.noreply.github.com> Co-authored-by: Elliott Sales de Andrade <quantum.analyst@gmail.com>
1 parent bb6e1aa commit f50efa5

File tree

4 files changed

+61
-2
lines changed

4 files changed

+61
-2
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
Add zorder option in QuiverKey
2+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3+
``zorder`` can be used as a keyword argument to `.QuiverKey`. Previously,
4+
that parameter did not have any effect because the zorder was hard coded.

lib/matplotlib/quiver.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,8 @@ class QuiverKey(martist.Artist):
241241

242242
def __init__(self, Q, X, Y, U, label,
243243
*, angle=0, coordinates='axes', color=None, labelsep=0.1,
244-
labelpos='N', labelcolor=None, fontproperties=None, **kwargs):
244+
labelpos='N', labelcolor=None, fontproperties=None,
245+
zorder=None, **kwargs):
245246
"""
246247
Add a key to a quiver plot.
247248
@@ -285,6 +286,8 @@ def __init__(self, Q, X, Y, U, label,
285286
A dictionary with keyword arguments accepted by the
286287
`~matplotlib.font_manager.FontProperties` initializer:
287288
*family*, *style*, *variant*, *size*, *weight*.
289+
zorder : float
290+
The zorder of the key. The default is 0.1 above *Q*.
288291
**kwargs
289292
Any additional keyword arguments are used to override vector
290293
properties taken from *Q*.
@@ -312,7 +315,7 @@ def __init__(self, Q, X, Y, U, label,
312315
if self.labelcolor is not None:
313316
self.text.set_color(self.labelcolor)
314317
self._dpi_at_last_init = None
315-
self.zorder = Q.zorder + 0.1
318+
self.zorder = zorder if zorder is not None else Q.zorder + 0.1
316319

317320
@property
318321
def labelsep(self):

lib/matplotlib/quiver.pyi

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ class QuiverKey(martist.Artist):
4545
labelpos: Literal["N", "S", "E", "W"] = ...,
4646
labelcolor: ColorType | None = ...,
4747
fontproperties: dict[str, Any] | None = ...,
48+
zorder: float | None = ...,
4849
**kwargs
4950
) -> None: ...
5051
@property

lib/matplotlib/tests/test_quiver.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
from matplotlib import pyplot as plt
88
from matplotlib.testing.decorators import image_comparison
9+
from matplotlib.testing.decorators import check_figures_equal
910

1011

1112
def draw_quiver(ax, **kwargs):
@@ -333,3 +334,53 @@ def test_quiver_setuvc_numbers():
333334

334335
q = ax.quiver(X, Y, U, V)
335336
q.set_UVC(0, 1)
337+
338+
339+
def draw_quiverkey_zorder_argument(fig, zorder=None):
340+
"""Draw Quiver and QuiverKey using zorder argument"""
341+
x = np.arange(1, 6, 1)
342+
y = np.arange(1, 6, 1)
343+
X, Y = np.meshgrid(x, y)
344+
U, V = 2, 2
345+
346+
ax = fig.subplots()
347+
q = ax.quiver(X, Y, U, V, pivot='middle')
348+
ax.set_xlim(0.5, 5.5)
349+
ax.set_ylim(0.5, 5.5)
350+
if zorder is None:
351+
ax.quiverkey(q, 4, 4, 25, coordinates='data',
352+
label='U', color='blue')
353+
ax.quiverkey(q, 5.5, 2, 20, coordinates='data',
354+
label='V', color='blue', angle=90)
355+
else:
356+
ax.quiverkey(q, 4, 4, 25, coordinates='data',
357+
label='U', color='blue', zorder=zorder)
358+
ax.quiverkey(q, 5.5, 2, 20, coordinates='data',
359+
label='V', color='blue', angle=90, zorder=zorder)
360+
361+
362+
def draw_quiverkey_setzorder(fig, zorder=None):
363+
"""Draw Quiver and QuiverKey using set_zorder"""
364+
x = np.arange(1, 6, 1)
365+
y = np.arange(1, 6, 1)
366+
X, Y = np.meshgrid(x, y)
367+
U, V = 2, 2
368+
369+
ax = fig.subplots()
370+
q = ax.quiver(X, Y, U, V, pivot='middle')
371+
ax.set_xlim(0.5, 5.5)
372+
ax.set_ylim(0.5, 5.5)
373+
qk1 = ax.quiverkey(q, 4, 4, 25, coordinates='data',
374+
label='U', color='blue')
375+
qk2 = ax.quiverkey(q, 5.5, 2, 20, coordinates='data',
376+
label='V', color='blue', angle=90)
377+
if zorder is not None:
378+
qk1.set_zorder(zorder)
379+
qk2.set_zorder(zorder)
380+
381+
382+
@pytest.mark.parametrize('zorder', [0, 2, 5, None])
383+
@check_figures_equal(extensions=['png'])
384+
def test_quiverkey_zorder(fig_test, fig_ref, zorder):
385+
draw_quiverkey_zorder_argument(fig_test, zorder=zorder)
386+
draw_quiverkey_setzorder(fig_ref, zorder=zorder)

0 commit comments

Comments
 (0)
0