def make_x_axis(self, x_label, x_min, x_max, x_step): self._add(self, Label(), name='XLabel', validate=None, desc="The label on the horizontal axis") self.XLabel.fontName = 'Helvetica' self.XLabel.fontSize = 10 self.XLabel.x = 22 self.XLabel.y = 45 self.XLabel.textAnchor = 'middle' self.XLabel.maxWidth = 500 self.XLabel.height = 20 self.XLabel._text = x_label self.chart.xValueAxis = XValueAxis() self.chart.xValueAxis.labels.boxAnchor = 'autox' self.chart.xValueAxis.valueMin = x_min self.chart.xValueAxis.valueMax = x_max self.chart.xValueAxis.valueStep = x_step self.chart.xValueAxis.labels.fontName = "Helvetica" self.chart.xValueAxis.labels.fontSize = 10 self.chart.xValueAxis.visibleTicks = 1 self.chart.xValueAxis.labels.rightPadding = 0 self.chart.xValueAxis.labels.dx = 1
def sample5d(): "Sample drawing, xvalue/yvalue axes, y connected at left of x." drawing = Drawing(400, 200) data = [(10, 20, 30, 42)] xAxis = XValueAxis() xAxis.setPosition(50, 50, 300) xAxis.configure(data) yAxis = YValueAxis() yAxis.setPosition(50, 50, 125) yAxis.joinAxis = xAxis yAxis.joinAxisMode = 'left' yAxis.configure(data) drawing.add(xAxis) drawing.add(yAxis) return drawing
def sample4d(): "Sample drawing, xvalue/yvalue axes, y connected to top of x." drawing = Drawing(400, 200) data = [(10, 20, 30, 42)] yAxis = YValueAxis() yAxis.setPosition(50, 50, 125) yAxis.configure(data) xAxis = XValueAxis() xAxis._length = 300 xAxis.joinAxis = yAxis xAxis.joinAxisMode = 'top' xAxis.configure(data) drawing.add(xAxis) drawing.add(yAxis) return drawing
def sample7b(): "Sample drawing, xvalue/ycat axes, y connected at left of x." drawing = Drawing(400, 200) data = [(10, 20, 30, 42)] xAxis = XValueAxis() xAxis._length = 300 xAxis.configure(data) yAxis = YCategoryAxis() yAxis.setPosition(50, 50, 125) yAxis.joinAxis = xAxis yAxis.joinAxisMode = 'left' yAxis.categoryNames = ['Beer', 'Wine', 'Meat', 'Cannelloni'] yAxis.labels.boxAnchor = 'e' yAxis.configure(data) drawing.add(xAxis) drawing.add(yAxis) return drawing
def sample4c1(): "xvalue/yvalue axes, without drawing axis lines/ticks." drawing = Drawing(400, 200) data = [(10, 20, 30, 42)] yAxis = YValueAxis() yAxis.setPosition(50, 50, 125) yAxis.configure(data) yAxis.visibleAxis = 0 yAxis.visibleTicks = 0 xAxis = XValueAxis() xAxis._length = 300 xAxis.joinAxis = yAxis xAxis.joinAxisMode = 'bottom' xAxis.configure(data) xAxis.visibleAxis = 0 xAxis.visibleTicks = 0 drawing.add(xAxis) drawing.add(yAxis) return drawing
def __init__(self): PlotArea.__init__(self) self.reversePlotOrder = 0 self.xValueAxis = XValueAxis() self.yValueAxis = YValueAxis() # this defines two series of 3 points. Just an example. self.data = [ ((1,1), (2,2), (2.5,1), (3,3), (4,5)), ((1,2), (2,3), (2.5,2), (3,4), (4,6)) ] self.lines = TypedPropertyCollection(LinePlotProperties) self.lines.strokeWidth = 1 self.lines[0].strokeColor = colors.red self.lines[1].strokeColor = colors.blue self.lineLabels = TypedPropertyCollection(Label) self.lineLabelFormat = None self.lineLabelArray = None # this says whether the origin is inside or outside # the bar - +10 means put the origin ten points # above the tip of the bar if value > 0, or ten # points inside if bar value < 0. This is different # to label dx/dy which are not dependent on the # sign of the data. self.lineLabelNudge = 10 # if you have multiple series, by default they butt # together. # New line chart attributes. self.joinedLines = 1 # Connect items with straight lines. #private attributes self._inFill = None self.annotations = [] self.behindAxes = 0 self.gridFirst = 0
xAxis.valueSteps = [10, 15, 20, 30, 35, 40] xAxis.configure(data) xAxis.labels.boxAnchor = 'n' drawing.add(xAxis) """) from reportlab.graphics import shapes from reportlab.graphics.charts.axes import XValueAxis drawing = Drawing(400, 100) data = [(10, 20, 30, 40)] xAxis = XValueAxis() xAxis.setPosition(75, 50, 300) xAxis.valueSteps = [10, 15, 20, 30, 35, 40] xAxis.configure(data) xAxis.labels.boxAnchor = 'n' drawing.add(xAxis) draw(drawing, 'An axis with non-equidistant tick marks') disc(""" In addition to these properties, all axes classes have three properties describing how to join two of them to each other. Again, this is interesting only if you define your own charts or want to modify the appearance of an existing chart using
def drawLineChart(self, (names, start, end, data, title), reserved=None): w = PAGE_WIDTH - 2 * inch h = w * 0.6 drawing = Drawing(w, h) lp = LinePlot() lp.x = 0 lp.y = 0 lp.height = h - 30 lp.width = w lp.data = data lp.joinedLines = 1 lp.strokeColor = colors.black lp.xValueAxis = XValueAxis() lp.xValueAxis.valueMin = start lp.xValueAxis.valueMax = end lp.xValueAxis.valueSteps = [(start + i * (end - start) / 5) for i in range(6)] lp.xValueAxis.labelTextFormat = lambda seconds: time.strftime( "%m/%d %H:%M", time.localtime(seconds)) lp.xValueAxis.labels.angle = 35 lp.xValueAxis.labels.fontName = 'Helvetica' lp.xValueAxis.labels.fontSize = 7 lp.xValueAxis.labels.dy = -10 lp.xValueAxis.labels.boxAnchor = 'e' lp.yValueAxis.labelTextFormat = lambda value: '%d MB' % (int(value) / 1000) lp.yValueAxis.labels.fontName = 'Helvetica' lp.yValueAxis.labels.fontSize = 7