@@ -272,6 +272,7 @@ def __init__(self, xdata, ydata,
272
272
linewidth = None , # all Nones default to rc
273
273
linestyle = None ,
274
274
color = None ,
275
+ gapcolor = None ,
275
276
marker = None ,
276
277
markersize = None ,
277
278
markeredgewidth = None ,
@@ -364,6 +365,9 @@ def __init__(self, xdata, ydata,
364
365
else :
365
366
self ._marker = marker
366
367
368
+ self ._gapcolor = None
369
+ self .set_gapcolor (gapcolor )
370
+
367
371
self ._markevery = None
368
372
self ._markersize = None
369
373
self ._antialiased = None
@@ -754,9 +758,6 @@ def draw(self, renderer):
754
758
self ._set_gc_clip (gc )
755
759
gc .set_url (self .get_url ())
756
760
757
- lc_rgba = mcolors .to_rgba (self ._color , self ._alpha )
758
- gc .set_foreground (lc_rgba , isRGBA = True )
759
-
760
761
gc .set_antialiased (self ._antialiased )
761
762
gc .set_linewidth (self ._linewidth )
762
763
@@ -772,6 +773,26 @@ def draw(self, renderer):
772
773
if self .get_sketch_params () is not None :
773
774
gc .set_sketch_params (* self .get_sketch_params ())
774
775
776
+ # We first draw a path within the gaps if needed.
777
+ if self .is_dashed () and self ._gapcolor is not None :
778
+ lc_rgba = mcolors .to_rgba (self ._gapcolor , self ._alpha )
779
+ gc .set_foreground (lc_rgba , isRGBA = True )
780
+
781
+ # Define the inverse pattern by moving the last gap to the
782
+ # start of the sequence.
783
+ dashes = self ._dash_pattern [1 ]
784
+ gaps = dashes [- 1 :] + dashes [:- 1 ]
785
+ # Set the offset so that this new first segment is skipped
786
+ # (see backend_bases.GraphicsContextBase.set_dashes for
787
+ # offset definition).
788
+ offset_gaps = self ._dash_pattern [0 ] + dashes [- 1 ]
789
+
790
+ gc .set_dashes (offset_gaps , gaps )
791
+ renderer .draw_path (gc , tpath , affine .frozen ())
792
+
793
+ lc_rgba = mcolors .to_rgba (self ._color , self ._alpha )
794
+ gc .set_foreground (lc_rgba , isRGBA = True )
795
+
775
796
gc .set_dashes (* self ._dash_pattern )
776
797
renderer .draw_path (gc , tpath , affine .frozen ())
777
798
gc .restore ()
@@ -876,6 +897,14 @@ def get_drawstyle(self):
876
897
"""
877
898
return self ._drawstyle
878
899
900
+ def get_gapcolor (self ):
901
+ """
902
+ Return the line gapcolor.
903
+
904
+ See also `~.Line2D.set_gapcolor`.
905
+ """
906
+ return self ._gapcolor
907
+
879
908
def get_linestyle (self ):
880
909
"""
881
910
Return the linestyle.
@@ -1066,6 +1095,29 @@ def set_drawstyle(self, drawstyle):
1066
1095
self ._invalidx = True
1067
1096
self ._drawstyle = drawstyle
1068
1097
1098
+ def set_gapcolor (self , gapcolor ):
1099
+ """
1100
+ Set a color to fill the gaps in the dashed line style.
1101
+
1102
+ .. note::
1103
+
1104
+ Striped lines are created by drawing two interleaved dashed lines.
1105
+ There can be overlaps between those two, which may result in
1106
+ artifacts when using transparency.
1107
+
1108
+ This functionality is experimental and may change.
1109
+
1110
+ Parameters
1111
+ ----------
1112
+ gapcolor : color or None
1113
+ The color with which to fill the gaps. If None, the gaps are
1114
+ unfilled.
1115
+ """
1116
+ if gapcolor is not None :
1117
+ mcolors ._check_color_like (color = gapcolor )
1118
+ self ._gapcolor = gapcolor
1119
+ self .stale = True
1120
+
1069
1121
def set_linewidth (self , w ):
1070
1122
"""
1071
1123
Set the line width in points.
@@ -1247,6 +1299,9 @@ def set_dashes(self, seq):
1247
1299
For example, (5, 2, 1, 2) describes a sequence of 5 point and 1 point
1248
1300
dashes separated by 2 point spaces.
1249
1301
1302
+ See also `~.Line2D.set_gapcolor`, which allows those spaces to be
1303
+ filled with a color.
1304
+
1250
1305
Parameters
1251
1306
----------
1252
1307
seq : sequence of floats (on/off ink in points) or (None, None)
@@ -1264,6 +1319,7 @@ def update_from(self, other):
1264
1319
self ._linestyle = other ._linestyle
1265
1320
self ._linewidth = other ._linewidth
1266
1321
self ._color = other ._color
1322
+ self ._gapcolor = other ._gapcolor
1267
1323
self ._markersize = other ._markersize
1268
1324
self ._markerfacecolor = other ._markerfacecolor
1269
1325
self ._markerfacecoloralt = other ._markerfacecoloralt
0 commit comments