@@ -126,17 +126,23 @@ class Line2D(Artist):
126
126
}
127
127
128
128
zorder = 2
129
+ validCap = ('butt' , 'round' , 'projecting' )
130
+ validJoin = ('miter' , 'round' , 'bevel' )
129
131
130
132
def __init__ (self , xdata , ydata ,
131
- linewidth = None , # default to rc
132
- linestyle = None , # default to rc
133
- color = None , # default to rc
134
- marker = None , # default to rc
135
- markersize = None , # default to rc
136
- markeredgewidth = None , # default to rc
137
- markeredgecolor = None , # default to rc
138
- markerfacecolor = None , # default to rc
139
- antialiased = None , # default to rc
133
+ linewidth = None , # all Nones default to rc
134
+ linestyle = None ,
135
+ color = None ,
136
+ marker = None ,
137
+ markersize = None ,
138
+ markeredgewidth = None ,
139
+ markeredgecolor = None ,
140
+ markerfacecolor = None ,
141
+ antialiased = None ,
142
+ dash_capstyle = None ,
143
+ solid_capstyle = None ,
144
+ dash_joinstyle = None ,
145
+ solid_joinstyle = None ,
140
146
):
141
147
"""
142
148
xdata is a sequence of x data
@@ -170,6 +176,15 @@ def __init__(self, xdata, ydata,
170
176
171
177
if markersize is None : markersize = rcParams ['lines.markersize' ]
172
178
if antialiased is None : antialiased = rcParams ['lines.antialiased' ]
179
+ if dash_capstyle is None : dc = rcParams ['lines.dash_capstyle' ]
180
+ if dash_joinstyle is None : dj = rcParams ['lines.dash_joinstyle' ]
181
+ if solid_capstyle is None : sc = rcParams ['lines.solid_capstyle' ]
182
+ if solid_joinstyle is None : sj = rcParams ['lines.solid_joinstyle' ]
183
+
184
+ self .set_dash_capstyle (dc )
185
+ self .set_dash_joinstyle (dj )
186
+ self .set_solid_capstyle (sc )
187
+ self .set_solid_joinstyle (sj )
173
188
174
189
175
190
self ._linestyle = linestyle
@@ -344,6 +359,14 @@ def draw(self, renderer):
344
359
if self .get_clip_on ():
345
360
gc .set_clip_rectangle (self .clipbox .get_bounds ())
346
361
362
+ if self .is_dashed ():
363
+ cap = self ._dashcapstyle
364
+ join = self ._dashjoinstyle
365
+ else :
366
+ cap = self ._solidcapstyle
367
+ join = self ._solidjoinstyle
368
+ gc .set_joinstyle (join )
369
+ gc .set_capstyle (cap )
347
370
348
371
if self ._newstyle :
349
372
# transform in backend
@@ -602,7 +625,6 @@ def _draw_steps(self, renderer, gc, xt, yt):
602
625
yt2 = ones ((2 * siz ,), yt .typecode ())
603
626
yt2 [0 :- 1 :2 ], yt2 [1 ::2 ]= yt , yt
604
627
gc .set_linestyle ('solid' )
605
- gc .set_capstyle ('projecting' )
606
628
607
629
if self ._newstyle :
608
630
renderer .draw_lines (gc , xt2 , yt2 , self ._transform )
@@ -612,7 +634,6 @@ def _draw_steps(self, renderer, gc, xt, yt):
612
634
def _draw_solid (self , renderer , gc , xt , yt ):
613
635
if len (xt )< 2 : return
614
636
gc .set_linestyle ('solid' )
615
- gc .set_capstyle ('projecting' )
616
637
if self ._newstyle :
617
638
renderer .draw_lines (gc , xt , yt , self ._transform )
618
639
else :
@@ -624,8 +645,6 @@ def _draw_dashed(self, renderer, gc, xt, yt):
624
645
gc .set_linestyle ('dashed' )
625
646
if self ._dashSeq is not None :
626
647
gc .set_dashes (0 , self ._dashSeq )
627
- gc .set_capstyle ('butt' )
628
- gc .set_joinstyle ('miter' )
629
648
630
649
if self ._newstyle :
631
650
renderer .draw_lines (gc , xt , yt , self ._transform )
@@ -636,8 +655,6 @@ def _draw_dashed(self, renderer, gc, xt, yt):
636
655
def _draw_dash_dot (self , renderer , gc , xt , yt ):
637
656
if len (xt )< 2 : return
638
657
gc .set_linestyle ('dashdot' )
639
- gc .set_capstyle ('butt' )
640
- gc .set_joinstyle ('miter' )
641
658
if self ._newstyle :
642
659
renderer .draw_lines (gc , xt , yt , self ._transform )
643
660
else :
@@ -647,8 +664,6 @@ def _draw_dotted(self, renderer, gc, xt, yt):
647
664
648
665
if len (xt )< 2 : return
649
666
gc .set_linestyle ('dotted' )
650
- gc .set_capstyle ('butt' )
651
- gc .set_joinstyle ('miter' )
652
667
if self ._newstyle :
653
668
renderer .draw_lines (gc , xt , yt , self ._transform )
654
669
else :
@@ -1205,3 +1220,77 @@ def get_mfc(self):
1205
1220
def get_ms (self ):
1206
1221
'alias for get_markersize'
1207
1222
return self .get_markersize ()
1223
+
1224
+ def set_dash_joinstyle (self , s ):
1225
+ """
1226
+ Set the join style for dashed linestyles
1227
+ ACCEPTS: ['miter' | 'round' | 'bevel']
1228
+ """
1229
+ s = s .lower ()
1230
+ if s not in self .validJoin :
1231
+ raise ValueError ('set_dash_joinstyle passed "%s"; valid joinstyles are %s' % (s , self .validJoin ))
1232
+ self ._dashjoinstyle = s
1233
+
1234
+ def set_solid_joinstyle (self , s ):
1235
+ """
1236
+ Set the join style for solid linestyles
1237
+ ACCEPTS: ['miter' | 'round' | 'bevel']
1238
+ """
1239
+ s = s .lower ()
1240
+ if s not in self .validJoin :
1241
+ raise ValueError ('set_solid_joinstyle passed "%s"; valid joinstyles are %s' % (s , self .validJoin ))
1242
+ self ._solidjoinstyle = s
1243
+
1244
+
1245
+ def get_dash_joinstyle (self ):
1246
+ """
1247
+ Get the join style for dashed linestyles
1248
+ """
1249
+ return self ._dashjoinstyle
1250
+
1251
+ def get_solid_joinstyle (self ):
1252
+ """
1253
+ Get the join style for solid linestyles
1254
+ """
1255
+ return self ._solidjoinstyle
1256
+
1257
+ def set_dash_capstyle (self , s ):
1258
+ """
1259
+ Set the cap style for dashed linestyles
1260
+ ACCEPTS: ['butt' | 'round' | 'projecting']
1261
+ """
1262
+ s = s .lower ()
1263
+ if s not in self .validCap :
1264
+ raise ValueError ('set_dash_capstyle passed "%s"; valid capstyles are %s' % (s , self .validJoin ))
1265
+
1266
+ self ._dashcapstyle = s
1267
+
1268
+
1269
+ def set_solid_capstyle (self , s ):
1270
+ """
1271
+ Set the cap style for solid linestyles
1272
+ ACCEPTS: ['butt' | 'round' | 'projecting']
1273
+ """
1274
+ s = s .lower ()
1275
+ if s not in self .validCap :
1276
+ raise ValueError ('set_solid_capstyle passed "%s"; valid capstyles are %s' % (s , self .validJoin ))
1277
+
1278
+ self ._solidcapstyle = s
1279
+
1280
+
1281
+ def get_dash_capstyle (self ):
1282
+ """
1283
+ Get the cap style for dashed linestyles
1284
+ """
1285
+ return self ._dashcapstyle
1286
+
1287
+ def get_solid_capstyle (self ):
1288
+ """
1289
+ Get the cap style for solid linestyles
1290
+ """
1291
+ return self ._solidcapstyle
1292
+
1293
+ def is_dashed (self ):
1294
+ 'return True if line is dashstyle'
1295
+ return self ._linestyle in ('--' , '-.' , ':' )
1296
+
0 commit comments