def makeLines(self): g = Group() labelFmt = self.lineLabelFormat P = list(range(len(self._positions))) if self.reversePlotOrder: P.reverse() inFill = self.inFill if inFill: inFillY = self.categoryAxis._y inFillX0 = self.valueAxis._x inFillX1 = inFillX0 + self.categoryAxis._length inFillG = getattr(self,'_inFillG',g) yzero = self._yzero # Iterate over data rows. for rowNo in P: row = self._positions[rowNo] styleCount = len(self.lines) styleIdx = rowNo % styleCount rowStyle = self.lines[styleIdx] rowColor = rowStyle.strokeColor dash = getattr(rowStyle, 'strokeDashArray', None) lineStyle = getattr(rowStyle,'lineStyle',None) if hasattr(rowStyle, 'strokeWidth'): strokeWidth = rowStyle.strokeWidth elif hasattr(self.lines, 'strokeWidth'): strokeWidth = self.lines.strokeWidth else: strokeWidth = None # Iterate over data columns. if lineStyle=='bar': barWidth = getattr(rowStyle,'barWidth',Percentage(50)) fillColor = getattr(rowStyle,'fillColor',rowColor) if isinstance(barWidth,Percentage): hbw = self._hngs*barWidth*0.01 else: hbw = barWidth*0.5 for colNo in range(len(row)): x,y = row[colNo] g.add(Rect(x-hbw,min(y,yzero),2*hbw,abs(y-yzero),strokeWidth=strokeWidth,strokeColor=rowColor,fillColor=fillColor)) elif self.joinedLines or lineStyle=='joinedLine': points = [] for colNo in range(len(row)): points += row[colNo] if inFill: points = points + [inFillX1,inFillY,inFillX0,inFillY] inFillG.add(Polygon(points,fillColor=rowColor,strokeColor=rowColor,strokeWidth=0.1)) else: line = PolyLine(points,strokeColor=rowColor,strokeLineCap=0,strokeLineJoin=1) if strokeWidth: line.strokeWidth = strokeWidth if dash: line.strokeDashArray = dash g.add(line) if hasattr(rowStyle, 'symbol'): uSymbol = rowStyle.symbol elif hasattr(self.lines, 'symbol'): uSymbol = self.lines.symbol else: uSymbol = None if uSymbol: for colNo in range(len(row)): x1, y1 = row[colNo] symbol = uSymbol2Symbol(uSymbol,x1,y1,rowStyle.strokeColor) if symbol: g.add(symbol) # Draw item labels. for colNo in range(len(row)): x1, y1 = row[colNo] self.drawLabel(g, rowNo, colNo, x1, y1) return g
def makeLines(self): g = Group() labelFmt = self.lineLabelFormat P = self._positions if self.reversePlotOrder: P.reverse() lines = self.lines styleCount = len(lines) _inFill = self.inFill if (_inFill or self._pairInFills or [ rowNo for rowNo in range(len(P)) if getattr(lines[rowNo % styleCount], 'inFill', False) ]): inFillY = self.categoryAxis._y inFillX0 = self.valueAxis._x inFillX1 = inFillX0 + self.categoryAxis._length inFillG = getattr(self, '_inFillG', g) yzero = self._yzero # Iterate over data rows. for rowNo, row in enumerate( reversed(P) if self.reversePlotOrder else P): styleIdx = rowNo % styleCount rowStyle = lines[styleIdx] strokeColor = rowStyle.strokeColor fillColor = getattr(rowStyle, 'fillColor', strokeColor) inFill = getattr(rowStyle, 'inFill', _inFill) dash = getattr(rowStyle, 'strokeDashArray', None) lineStyle = getattr(rowStyle, 'lineStyle', None) if hasattr(rowStyle, 'strokeWidth'): strokeWidth = rowStyle.strokeWidth elif hasattr(lines, 'strokeWidth'): strokeWidth = lines.strokeWidth else: strokeWidth = None # Iterate over data columns. if lineStyle == 'bar': barWidth = getattr(rowStyle, 'barWidth', Percentage(50)) if isinstance(barWidth, Percentage): hbw = self._hngs * barWidth * 0.01 else: hbw = barWidth * 0.5 for x, y in row: g.add( Rect(x - hbw, min(y, yzero), 2 * hbw, abs(y - yzero), strokeWidth=strokeWidth, strokeColor=strokeColor, fillColor=fillColor)) elif self.joinedLines or lineStyle == 'joinedLine': points = flatten(row) if inFill or isinstance(row, FillPairedData): filler = getattr(rowStyle, 'filler', None) if isinstance(row, FillPairedData): fpoints = points + flatten(reversed(P[row.other])) else: fpoints = [inFillX0, inFillY ] + points + [inFillX1, inFillY] if filler: filler.fill(self, inFillG, rowNo, fillColor, fpoints) else: inFillG.add( Polygon(fpoints, fillColor=fillColor, strokeColor=strokeColor if strokeColor == fillColor else None, strokeWidth=strokeWidth or 0.1)) if not inFill or inFill == 2 or strokeColor != fillColor: line = PolyLine(points, strokeColor=strokeColor, strokeLineCap=0, strokeLineJoin=1) if strokeWidth: line.strokeWidth = strokeWidth if dash: line.strokeDashArray = dash g.add(line) if hasattr(rowStyle, 'symbol'): uSymbol = rowStyle.symbol elif hasattr(lines, 'symbol'): uSymbol = lines.symbol else: uSymbol = None if uSymbol: for colNo, (x, y) in enumerate(row): symbol = uSymbol2Symbol(tpcGetItem(uSymbol, colNo), x, y, rowStyle.strokeColor) if symbol: g.add(symbol) # Draw item labels. for colNo, (x, y) in enumerate(row): self.drawLabel(g, rowNo, colNo, x, y) return g