Skip to content

Commit b8bd396

Browse files
committed
ENH : first pass at making Line2D objects dirty-aware
All set_* commands now set dirty to be True if the value is changed. This required pre-defining all of the Line2D private attributes in the `__init__` method so that all of the `set_*` methods work the first time through.
1 parent 6a6f8d9 commit b8bd396

File tree

1 file changed

+59
-7
lines changed

1 file changed

+59
-7
lines changed

lib/matplotlib/lines.py

Lines changed: 59 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -314,26 +314,47 @@ def __init__(self, xdata, ydata,
314314
if drawstyle is None:
315315
drawstyle = 'default'
316316

317+
self._dashcapstyle = None
318+
self._dashjoinstyle = None
319+
self._solidjoinstyle = None
320+
self._solidcapstyle = None
317321
self.set_dash_capstyle(dash_capstyle)
318322
self.set_dash_joinstyle(dash_joinstyle)
319323
self.set_solid_capstyle(solid_capstyle)
320324
self.set_solid_joinstyle(solid_joinstyle)
321325

326+
self._linestyles = None
327+
self._drawstyle = None
328+
self._linewidth = None
322329
self.set_linestyle(linestyle)
323330
self.set_drawstyle(drawstyle)
324331
self.set_linewidth(linewidth)
332+
333+
self._color = None
325334
self.set_color(color)
326335
self._marker = MarkerStyle()
327336
self.set_marker(marker)
337+
338+
self._markevery = None
339+
self._markersize = None
340+
self._antialiased = None
341+
328342
self.set_markevery(markevery)
329343
self.set_antialiased(antialiased)
330344
self.set_markersize(markersize)
345+
331346
self._dashSeq = None
332347

348+
self._markeredgecolor = None
349+
self._markeredgewidth = None
350+
self._markerfacecolor = None
351+
self._markerfacecoloralt = None
352+
333353
self.set_markerfacecolor(markerfacecolor)
334354
self.set_markerfacecoloralt(markerfacecoloralt)
335355
self.set_markeredgecolor(markeredgecolor)
336356
self.set_markeredgewidth(markeredgewidth)
357+
337358
self.set_fillstyle(fillstyle)
338359

339360
self.verticalOffset = None
@@ -457,6 +478,7 @@ def set_fillstyle(self, fs):
457478
ACCEPTS: ['full' | 'left' | 'right' | 'bottom' | 'top' | 'none']
458479
"""
459480
self._marker.set_fillstyle(fs)
481+
self.dirty = True
460482

461483
def set_markevery(self, every):
462484
"""Set the markevery property to subsample the plot when using markers.
@@ -509,7 +531,8 @@ def set_markevery(self, every):
509531
axes-bounding-box-diagonal regardless of the actual axes data limits.
510532
511533
"""
512-
534+
if self._markevery != every:
535+
self.dirty = True
513536
self._markevery = every
514537

515538
def get_markevery(self):
@@ -890,6 +913,8 @@ def set_antialiased(self, b):
890913
891914
ACCEPTS: [True | False]
892915
"""
916+
if self._antialiased != b:
917+
self.dirty = True
893918
self._antialiased = b
894919

895920
def set_color(self, color):
@@ -898,6 +923,8 @@ def set_color(self, color):
898923
899924
ACCEPTS: any matplotlib color
900925
"""
926+
if color != self._color:
927+
self.dirty = True
901928
self._color = color
902929

903930
def set_drawstyle(self, drawstyle):
@@ -911,6 +938,8 @@ def set_drawstyle(self, drawstyle):
911938
ACCEPTS: ['default' | 'steps' | 'steps-pre' | 'steps-mid' |
912939
'steps-post']
913940
"""
941+
if self._drawstyle != drawstyle:
942+
self.dirty = True
914943
self._drawstyle = drawstyle
915944

916945
def set_linewidth(self, w):
@@ -919,7 +948,10 @@ def set_linewidth(self, w):
919948
920949
ACCEPTS: float value in points
921950
"""
922-
self._linewidth = float(w)
951+
w = float(w)
952+
if self._linewidth != w:
953+
self.dirty = True
954+
self._linewidth = w
923955

924956
def set_linestyle(self, ls):
925957
"""
@@ -1021,6 +1053,8 @@ def set_markeredgecolor(self, ec):
10211053
"""
10221054
if ec is None:
10231055
ec = 'auto'
1056+
if self._markeredgecolor != ec:
1057+
self.dirty = True
10241058
self._markeredgecolor = ec
10251059

10261060
def set_markeredgewidth(self, ew):
@@ -1031,6 +1065,8 @@ def set_markeredgewidth(self, ew):
10311065
"""
10321066
if ew is None:
10331067
ew = rcParams['lines.markeredgewidth']
1068+
if self._markeredgewidth != ew:
1069+
self.dirty = True
10341070
self._markeredgewidth = ew
10351071

10361072
def set_markerfacecolor(self, fc):
@@ -1041,7 +1077,8 @@ def set_markerfacecolor(self, fc):
10411077
"""
10421078
if fc is None:
10431079
fc = 'auto'
1044-
1080+
if self._markerfacecolor != fc:
1081+
self.dirty = True
10451082
self._markerfacecolor = fc
10461083

10471084
def set_markerfacecoloralt(self, fc):
@@ -1052,7 +1089,8 @@ def set_markerfacecoloralt(self, fc):
10521089
"""
10531090
if fc is None:
10541091
fc = 'auto'
1055-
1092+
if self._markerfacecoloralt != fc:
1093+
self.dirty = True
10561094
self._markerfacecoloralt = fc
10571095

10581096
def set_markersize(self, sz):
@@ -1061,7 +1099,10 @@ def set_markersize(self, sz):
10611099
10621100
ACCEPTS: float
10631101
"""
1064-
self._markersize = float(sz)
1102+
sz = float(sz)
1103+
if self._markersize != sz:
1104+
self.dirty = True
1105+
self._markersize = sz
10651106

10661107
def set_xdata(self, x):
10671108
"""
@@ -1071,6 +1112,7 @@ def set_xdata(self, x):
10711112
"""
10721113
self._xorig = x
10731114
self._invalidx = True
1115+
self.dirty = True
10741116

10751117
def set_ydata(self, y):
10761118
"""
@@ -1080,6 +1122,7 @@ def set_ydata(self, y):
10801122
"""
10811123
self._yorig = y
10821124
self._invalidy = True
1125+
self.dirty = True
10831126

10841127
def set_dashes(self, seq):
10851128
"""
@@ -1093,6 +1136,8 @@ def set_dashes(self, seq):
10931136
self.set_linestyle('-')
10941137
else:
10951138
self.set_linestyle('--')
1139+
if self._dashSeq != seq:
1140+
self.dirty = True
10961141
self._dashSeq = seq # TODO: offset ignored for now
10971142

10981143
def _draw_lines(self, renderer, gc, path, trans):
@@ -1276,6 +1321,8 @@ def set_dash_joinstyle(self, s):
12761321
if s not in self.validJoin:
12771322
raise ValueError('set_dash_joinstyle passed "%s";\n' % (s,)
12781323
+ 'valid joinstyles are %s' % (self.validJoin,))
1324+
if self._dashjoinstyle != s:
1325+
self.dirty = True
12791326
self._dashjoinstyle = s
12801327

12811328
def set_solid_joinstyle(self, s):
@@ -1287,6 +1334,9 @@ def set_solid_joinstyle(self, s):
12871334
if s not in self.validJoin:
12881335
raise ValueError('set_solid_joinstyle passed "%s";\n' % (s,)
12891336
+ 'valid joinstyles are %s' % (self.validJoin,))
1337+
1338+
if self._solidjoinstyle != s:
1339+
self.dirty = True
12901340
self._solidjoinstyle = s
12911341

12921342
def get_dash_joinstyle(self):
@@ -1311,7 +1361,8 @@ def set_dash_capstyle(self, s):
13111361
if s not in self.validCap:
13121362
raise ValueError('set_dash_capstyle passed "%s";\n' % (s,)
13131363
+ 'valid capstyles are %s' % (self.validCap,))
1314-
1364+
if self._dashcapstyle != s:
1365+
self.dirty = True
13151366
self._dashcapstyle = s
13161367

13171368
def set_solid_capstyle(self, s):
@@ -1324,7 +1375,8 @@ def set_solid_capstyle(self, s):
13241375
if s not in self.validCap:
13251376
raise ValueError('set_solid_capstyle passed "%s";\n' % (s,)
13261377
+ 'valid capstyles are %s' % (self.validCap,))
1327-
1378+
if self._solidcapstyle != s:
1379+
self.dirty = True
13281380
self._solidcapstyle = s
13291381

13301382
def get_dash_capstyle(self):

0 commit comments

Comments
 (0)