def __init__(self, width=400, height=200, data=[], labels=[], legends=[], *args, **kw): Drawing.__init__(self, width, height, *args, **kw) self.add(VerticalBarChart(), name='chart') self.add(Legend(), name='legend') self.chart.x = 15 self.chart.y = 15 self.chart.width = self.width - 20 self.chart.height = self.height - 40 self.chart.data = data self.chart.categoryAxis.categoryNames = labels self.chart.categoryAxis.labels.boxAnchor = 'ne' self.chart.categoryAxis.labels.angle = 30 for i in range(len(data)): self.chart.bars[i].fillColor = color_list[i] self.legend.alignment = 'right' self.legend.x = self.width self.legend.y = self.height - self.height / 4 self.legend.dx = 8 self.legend.dy = 8 self.legend.deltay = 10 self.legend.dxTextSpace = 3 self.legend.columnMaximum = 10 self.legend.colorNamePairs = [(color_list[i], legends[i]) for i in range(len(legends))]
def getBarChart(self, x_values, y_values): """Gets a bar chart with the given values Parameters: self: the class instance x_values: list - x values for the bar chart y_values: list - y values for the bar chart Returns: reportlab Vertical Bar Chart - bar chart with inputted values """ y_values = [tuple(y_values)] bc = VerticalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = y_values bc.strokeColor = colors.black bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = 250 bc.valueAxis.valueStep = 25 bc.categoryAxis.labels.boxAnchor = 'ne' bc.categoryAxis.labels.dx = 8 bc.categoryAxis.labels.dy = -2 bc.categoryAxis.labels.angle = 45 bc.categoryAxis.categoryNames = x_values return bc
def genBarDrawing(data, data_note, width=letter[0]*0.8, height=letter[1]*0.25): """ 函数功能:生成Drawing之用 :return: """ data_value = list(map(lambda x:x[1],data)) data_finale = [tuple(data_value)] drawing = Drawing(width=width, height=height) bc = VerticalBarChart() # bc.x = 50 # bc.y = 50 # bc.height = 125 bc.width = width bc.data = data_finale # bc.valueAxis.valueMin = 0 bc.barSpacing = 0 # bc.valueAxis.valueMax = 50 # bc.valueAxis.valueStep = 10 # bc.categoryAxis.style = 'stacked' bc.categoryAxis.labels.boxAnchor = 'ne' bc.categoryAxis.labels.dx = 8 bc.categoryAxis.labels.dy = -2 bc.categoryAxis.labels.angle = 30 barFillColors = [ colors.red, colors.green, colors.white, colors.blue, colors.yellow, colors.pink, colors.purple, colors.lightgreen, colors.darkblue, colors.lightyellow, colors.fidred, colors.greenyellow, colors.gray, colors.blueviolet, colors.lightgoldenrodyellow] for i in range(len(data_finale)): bc.bars[i].name = data_note[i] # 最多只支持15种颜色,多出的设置为红色 if i < 15: bc.bars[i].fillColor = barFillColors[i] else: bc.bars[i].fillColor = colors.red # x_min = data[0][0] # x_max = data[-1][0] # bc.xValueAxis.valueMin = x_min # lp.xValueAxis.valueMax = x_max # step = int(((x_max - x_min) / (60 * 60 * 24)) / 15) + 1 # bc.categoryAxis.categoryNames = [str(Sec2Datetime(x))[0:10] for x in range(int(x_min), int(x_max), 60 * 60 * 24 * step)] drawing.add(bc) # 增加legend # add_legend(drawing, bc, pos_x=10, pos_y=-10) return drawing
def category_predicted_spending(c, category, h, w): """ Creates a bar graph in a PDF """ my_data = [] for i in range(1, month + 1): my_data.append(round(data.category_data(category, i, year))) budget = data.category_budget(category) re_budget = (budget - sum(my_data)) / (12 - month) for x in range(month, 12): my_data.append(re_budget) d = Drawing(0, 0) bar = VerticalBarChart() bar.x = 150 bar.y = 150 bar.data = [my_data] bar.valueAxis.valueMin = 0 bar.categoryAxis.categoryNames = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ] bar.categoryAxis.labels.fontName = serif_font bar.valueAxis.labels.fontName = serif_font bar.categoryAxis.labels.boxAnchor = 'n' bar.categoryAxis.labels.angle = 90 bar.categoryAxis.labels.dy = -15 bar.categoryAxis.labels.dx = -10 #below change monnth number based upon current month bar.bars[0].fillColor = PCMYKColor(150, 150, 150, 150, alpha=85) for i in range(month, 12): bar.bars[(0, i)].fillColor = PCMYKColor(0, 150, 150, 0, alpha=85) d.add(bar, '') d.drawOn(c, h, w)
def print_chunks_chart(self): nChunks = len(self.filechunks) d = Drawing(400, 140) traffic_MB = [n / (1024 * 1024) for n in self.traffic] data = [traffic_MB] bc = VerticalBarChart() ## bc.x = 0 ## bc.y = 10 bc.height = 100 bc.width = 370 bc.data = data bc.categoryAxis.tickUp = 0.5 bc.categoryAxis.tickDown = 1.5 bc.categoryAxis.categoryNames = [] for n in range(nChunks): if n % 5 == 0: bc.categoryAxis.categoryNames.append(str(n)) else: bc.categoryAxis.categoryNames.append('') bc.bars.strokeWidth = 0.3 bc.valueAxis.labels.fontSize = 6 bc.categoryAxis.labels.fontSize = 6 bc.bars[0].fillColor = colors.lightblue bc.valueAxis.valueMin = 0 d.add(bc) drawing = GraphicsDrawing(d, 'Traffic per chunk in MB') self.story.append(drawing) self.story.append(Spacer(0.01, 1.0 * cm))
def gen_bar_graphs(comparison_values, location, emission): bc = VerticalBarChart() labels = [] data = [] comparison_values.append([location, emission]) comparison_values.sort(key=lambda x: x[1]) for pair in comparison_values: labels.append(pair[0]) data.append(pair[1]) data = [data] location_index = labels.index(location) bc.x = -150 bc.y = -110 bc.height = 100 bc.width = 150 bc.data = data bc.strokeColor = colors.black bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = data[0][-1] + data[0][-1] * .1 #bc.valueAxis.valueStep = 10 bc.categoryAxis.labels.boxAnchor = 'ne' bc.categoryAxis.labels.dx = 8 bc.categoryAxis.labels.dy = -2 bc.categoryAxis.labels.angle = 30 bc.categoryAxis.categoryNames = labels for i in range(len(labels)): bc.bars[(0, i)].fillColor = colors.Color(166.0 / 255, 189.0 / 255, 219.0 / 255) bc.bars[(0, location_index)].fillColor = colors.Color(28.0 / 255, 144.0 / 255, 153.0 / 255) return bc
def overview_year_spend_by_month(c, w, h): my_data = data.monthly_total(year) total_budget = data.budget() left_budget = (total_budget - sum(my_data)) / (12 - month) for i in range(month, 12): my_data[i] = left_budget d = Drawing(0, 0) bar = VerticalBarChart() bar.x = 150 bar.y = 150 bar.data = [my_data] bar.valueAxis.valueMin = 0 bar.categoryAxis.categoryNames = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ] bar.categoryAxis.labels.fontName = serif_font bar.valueAxis.labels.fontName = serif_font bar.categoryAxis.labels.boxAnchor = 'n' bar.categoryAxis.labels.angle = 90 bar.categoryAxis.labels.dy = -15 bar.categoryAxis.labels.dx = -10 bar.bars[0].fillColor = PCMYKColor(150, 150, 150, 150, alpha=85) bar.bars[(0, month - 1)].fillColor = PCMYKColor(150, 0, 0, 0, alpha=85) for i in range(month, 13): bar.bars[(0, i)].fillColor = PCMYKColor(0, 150, 150, 0, alpha=85) d.add(bar, '') d.drawOn(c, w, h)
def createBarGraph(self): """ Creates a bar graph in a PDF """ d = Drawing(300, 250) bar = VerticalBarChart() bar.x = 90 bar.y = 130 BarData = [] CategoryLabels = [] result_data = getStudentTrendInExams(self.student['user_id']) for rd in result_data: BarData.append(float(rd['points'])) CategoryLabels.append(rd['label']) bar.data = [BarData] bar.categoryAxis.categoryNames = CategoryLabels bar.valueAxis.valueMin = 0 bar.valueAxis.valueMax = 100 bar.valueAxis.valueStep = 20 bar.categoryAxis.labels.dx = -18 bar.categoryAxis.labels.dy = -30 bar.categoryAxis.labels.angle = 60 bar.bars[0].fillColor = colors.black d.add(bar, '') return d
def create_bar_graph(): """ Creates a bar graph in a PDF """ d = Drawing(280, 250) bar = VerticalBarChart() bar.x = 50 bar.y = 85 data = [[1, 2, 3, None, None, None, 5], [10, 5, 2, 6, 8, 3, 5], [5, 7, 2, 8, 8, 2, 5], [2, 10, 2, 1, 8, 9, 5], ] bar.data = data bar.categoryAxis.categoryNames = ['Year1', 'Year2', 'Year3', 'Year4', 'Year5', 'Year6', 'Year7'] bar.bars[0].fillColor = PCMYKColor(0, 100, 100, 40, alpha=85) bar.bars[1].fillColor = PCMYKColor(23, 51, 0, 4, alpha=85) bar.bars.fillColor = PCMYKColor(100, 0, 90, 50, alpha=85) d.add(bar, '') d.save(formats=['pdf'], outDir='.', fnRoot='test')
def simple_bar_chart_angled_labels(): d = Drawing(280, 250) bar = VerticalBarChart() bar.x = 50 bar.y = 85 data = [ [1, 2, 3, None, None, None, 5], [10, 5, 2, 6, 8, 3, 5], [5, 7, 2, 8, 8, 2, 5], [2, 10, 2, 1, 8, 9, 5], ] bar.data = data bar.categoryAxis.categoryNames = [ 'Year1', 'Year2', 'Year3', 'Year4', 'Year5', 'Year6', 'Year7' ] bar.bars[0].fillColor = colors.green bar.bars[1].fillColor = colors.blue bar.bars[2].fillColor = colors.red bar.bars[3].fillColor = colors.purple bar.categoryAxis.labels.angle = 45 bar.categoryAxis.labels.dy = -15 bar.groupSpacing = 12 bar.barSpacing = 2 d.add(bar, '') doc = SimpleDocTemplate('simple_bar_chart_angled_labels.pdf') story = [] story.append(d) doc.build(story)
def persona(request,id): if 'pdf' in request.GET: response = HttpResponse(content_type='application/pdf') response['Content-Disposition'] = 'inline; filename="persona_%s.pdf"'%id p=canvas.Canvas(response) drawing = Drawing(400, 200) data = [(13, 5, 20, 22, 37, 45, 19, 4),(14, 6, 21, 23, 38, 46, 20, 5)] bc = VerticalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = data bc.strokeColor = colors.black bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = 50 bc.valueAxis.valueStep = 10 bc.categoryAxis.labels.boxAnchor = 'ne' bc.categoryAxis.labels.dx = 8 bc.categoryAxis.labels.dy = -2 bc.categoryAxis.labels.angle = 30 bc.categoryAxis.categoryNames = ['Jan-99','Feb-99','Mar-99','Apr-99','May-99','Jun-99','Jul-99','Aug-99'] drawing.add(bc) renderPDF.draw(drawing,p,100,480) p.showPage() p.save() return response else: return HttpResponse("la informacion de la persona %s" %id)
def getdrawing(): from reportlab.graphics.shapes import Drawing from reportlab.lib import colors from reportlab.graphics.charts.barcharts import VerticalBarChart drawing = Drawing(400, 200) data = [(13, 5, 20, 22, 37, 45, 19, 4), (14, 6, 21, 23, 38, 46, 20, 5)] bc = VerticalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = data bc.strokeColor = colors.black bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = 50 bc.valueAxis.valueStep = 10 bc.categoryAxis.labels.boxAnchor = "ne" bc.categoryAxis.labels.dx = 8 bc.categoryAxis.labels.dy = -2 bc.categoryAxis.labels.angle = 30 bc.categoryAxis.categoryNames = [ "Jan-99", "Feb-99", "Mar-99", "Apr-99", "May-99", "Jun-99", "Jul-99", "Aug-99" ] drawing.add(bc) return drawing
def vertical_bar_chart_draw(self, values, days, llabels): d = Drawing(0, 170) bc = VerticalBarChart() bc.height = 125 bc.width = 470 bc.data = values bc.barSpacing = 0.5 bc.categoryAxis.labels.dx = 8 bc.categoryAxis.labels.dy = -2 bc.categoryAxis.categoryNames = days bc.barLabelFormat = '%d' bc.barLabels.nudge = 7 bc.valueAxis.labelTextFormat = '%d km/h' bc.valueAxis.valueMin = 0 d.add(self.title_draw(250, 190, _('Wind speed statistics'))) d.add(bc) d.add( self.legend_draw(llabels, bc, x=480, y=165, boxAnchor='ne', columnMaximum=1, type='bar')) return d
def gen_bar_graphs(comparison_values, location, emission): bc = VerticalBarChart() labels = [] data = [] comparison_values.append([location, emission]) comparison_values.sort(key = lambda x: x[1]) for pair in comparison_values: labels.append(pair[0]) data.append(pair[1]) data = [data] location_index = labels.index(location) bc.x = -150 bc.y = -110 bc.height = 100 bc.width = 150 bc.data = data bc.strokeColor = colors.black bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = data[0][-1] + data[0][-1] * .1 distance = abs(int(math.log10(abs(data[0][-1])))) + 1 # distance of 1 significant figure to decimal point bc.valueAxis.valueStep = float(format(data[0][-1], '.1g')) / 3 bc.valueAxis.labelTextFormat = '%0.' + str(distance) + 'g' bc.categoryAxis.labels.boxAnchor = 'ne' bc.categoryAxis.labels.dx = 8 bc.categoryAxis.labels.dy = -2 bc.categoryAxis.labels.angle = 30 bc.categoryAxis.categoryNames = labels for i in range(len(labels)): bc.bars[(0, i)].fillColor = colors.Color(166.0/255, 189.0/255, 219.0/255) bc.bars[(0, location_index)].fillColor = colors.Color(28.0/255, 144.0/255, 153.0/255) return bc
def draw_bar(bar_data=[], ax=[], items=[]): drawing = Drawing(500, 250) bc = VerticalBarChart() bc.x = 35 bc.y = 100 bc.height = 120 bc.width = 350 bc.data = bar_data bc.strokeColor = colors.black bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = 100 bc.valueAxis.valueStep = 10 bc.categoryAxis.labels.dx = 8 bc.categoryAxis.labels.dy = -10 bc.categoryAxis.labels.angle = 20 bc.categoryAxis.categoryNames = ax # 图示 leg = Legend() leg.fontName = 'song' leg.alignment = 'right' leg.boxAnchor = 'ne' leg.x = 465 leg.y = 220 leg.dxTextSpace = 10 leg.columnMaximum = 3 leg.colorNamePairs = items drawing.add(leg) drawing.add(bc) return drawing
def myBarChart(data): drawing = Drawing(400, 200) bc = VerticalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = data bc.barWidth = .3 * inch bc.groupSpacing = .2 * inch bc.strokeColor = colors.black bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = 100 bc.valueAxis.valueStep = 10 bc.categoryAxis.labels.boxAnchor = 'ne' bc.categoryAxis.labels.dx = 8 bc.categoryAxis.labels.dy = -2 catNames = ('Trial1 Trial2 Trial3 Trial4 Trial5').split() bc.categoryAxis.categoryNames = catNames bc.bars[0].fillColor = colors.red bc.bars[1].fillColor = colors.lightblue drawing.add(bc) return drawing
def sample1bar(data=[(13, 5, 20, 22, 37, 45, 19, 4)]): drawing = Drawing(400, 200) bc = VerticalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = data bc.strokeColor = colors.black bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = 60 bc.valueAxis.valueStep = 15 bc.categoryAxis.labels.boxAnchor = 'ne' bc.categoryAxis.labels.dx = 8 bc.categoryAxis.labels.dy = -2 bc.categoryAxis.labels.angle = 30 bc.categoryAxis.labels.fontName = fontName bc.barLabels.fontName = fontName bc.barLabelFormat = u'\xc5%s' catNames = u'J\xe4n Feb M\xe4r \xc4pr M\xe4y J\xfcn J\xfcl \xc4\xfcg'.split( ' ') bc.barLabelArray = catNames catNames = [n + '-99' for n in catNames] bc.categoryAxis.categoryNames = catNames drawing.add(bc) return drawing
def show_figure(data, y_max, x_category, legend_category): drawing = Drawing(400, 200) bc = VerticalBarChart() bc.x = 50 bc.y = 50 bc.height = 150 bc.width = 450 bc.data = data bc.strokeColor = colors.black bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = y_max # bc.valueAxis.valueStep = 15 bc.categoryAxis.labels.boxAnchor = 'ne' bc.categoryAxis.labels.dx = len(data[0]) # bc.categoryAxis.labels.dy = -2 # bc.categoryAxis.labels.angle = 30 bc.categoryAxis.categoryNames = x_category drawing.add(bc) # add legend from here swatches = Legend() swatches.alignment = 'right' swatches.x = 80 swatches.y = 190 swatches.deltax = 30 swatches.dxTextSpace = 10 swatches.columnMaximum = 1 color_list = (colors.red, colors.green, colors.blue, colors.pink, colors.yellow) items = [] for index, item in enumerate(legend_category): items.append((color_list[index], item)) swatches.colorNamePairs = items drawing.add(swatches, 'legend') return drawing
def vertical_bar_chart_draw(self, values, days, llabels): d = Drawing(0, 170) # chart bc = VerticalBarChart() # set width and height bc.height = 125 bc.width = 470 # set data bc.data = values # set distance between bars elements bc.barSpacing = 0.5 # set labels position under the x axe bc.categoryAxis.labels.dx = 8 bc.categoryAxis.labels.dy = -2 # set name displayed for x axe bc.categoryAxis.categoryNames = days # set label format for each bar bc.barLabelFormat = '%d' # set distance between top of bar and it's label bc.barLabels.nudge = 7 # set some charactestics for the Y axe bc.valueAxis.labelTextFormat = '%d km/h' bc.valueAxis.valueMin = 0 d.add(self.title_draw(250, 190, _('Wind speed statistics'))) d.add(bc) d.add(self.legend_draw(llabels, bc, x=480, y=165, boxAnchor='ne', columnMaximum=1, type='bar')) # d.add(bcl) return d
def createpdf(self, datas): drawing = Drawing(400, 200) # data = [(13, 5, 20),(14, 6, 21)] data = datas bc = VerticalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = data bc.strokeColor = colors.black bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = 50 bc.valueAxis.valueStep = 10 bc.categoryAxis.labels.boxAnchor = 'ne' bc.categoryAxis.labels.dx = 8 bc.categoryAxis.labels.dy = -2 bc.categoryAxis.labels.angle = 30 bc.categoryAxis.categoryNames = ['Jan-99', 'Feb-99', 'Mar-99'] # bc.categoryAxis.categoryNames = ytype drawing.add(bc) drawing.add(String(250, 150, "ss", fontSize=14, fillColor=colors.red)) # drawing.add(String(250,150,des, fontSize=14,fillColor=colors.red)) renderPDF.drawToFile(drawing, 'report1.pdf', 'API')
def monthly_spending_bar(c, category, h, w): """ Creates a bar graph in a PDF """ my_data = [] for i in range(1, 12 + 1): my_data.append(data.category_data(category.lower(), i, year)) for i in range(month, 12): my_data[i] = 0 #d = Drawing(300, 250) d = Drawing(0, 0) bar = VerticalBarChart() bar.x = 150 bar.y = 150 bar.data = [my_data] bar.valueAxis.valueMin = 0 bar.categoryAxis.categoryNames = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ] bar.categoryAxis.labels.fontName = serif_font bar.valueAxis.labels.fontName = serif_font bar.categoryAxis.labels.boxAnchor = 'n' bar.categoryAxis.labels.angle = 90 bar.categoryAxis.labels.dy = -15 bar.categoryAxis.labels.dx = -10 #below change monnth number based upon current month bar.bars[0].fillColor = PCMYKColor(150, 150, 150, 150, alpha=85) bar.bars[(0, month - 1)].fillColor = PCMYKColor(150, 0, 0, 0, alpha=85) d.add(bar, '') d.drawOn(c, 200, 480)
def make_drawing(d, answerKey): drawing = Drawing(400, 200) maxData = 0 for count in d: if count > maxData: maxData = count data = [ tuple(d), ] names = answerKey bc = VerticalBarChart() bc.x = 20 bc.y = 50 bc.height = 180 bc.width = 400 bc.data = data bc.strokeColor = colors.white bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = maxData bc.valueAxis.valueStep = 10 bc.categoryAxis.labels.boxAnchor = 'ne' bc.categoryAxis.labels.dx = -10 bc.categoryAxis.labels.fontName = 'Helvetica' bc.categoryAxis.categoryNames = names drawing.add(bc) return drawing
def getVerticalBarChart(): data = [(3, 18, 20), (14, 12, 21)] chart = VerticalBarChart() chart.data = data chart.valueAxis.valueMin = 0 chart.valueAxis.valueMax = 25 chart.valueAxis.valueStep = 5 chart.x = 5 chart.y = 5 chart.width = 240 chart.height = 100 chart.strokeColor = colors.black chart.fillColor = colors.yellow chart.groupSpacing = 0 chart.categoryAxis.categoryNames = ['A', 'B', 'C'] title = String(50, 110, 'Vertical Bar Chart', fontSize=14) drawing = Drawing(240, 120) drawing.add(title) drawing.add(chart) return drawing
def ventas_totales(pos, periodos, ventas_totales): arreglo = [periodos, ventas_totales] table = Table(arreglo, colWidths=3 * cm) table.setStyle([('ALIGN', (0, 0), (-1, -1), 'LEFT')]) for index, row in enumerate(arreglo): bg_color = colors.red ini, fin = (0, index), (len(row) - 1, index) table.setStyle([("BOX", ini, fin, 0.25, colors.black), ('INNERGRID', ini, fin, 0.25, colors.black), ('BACKGROUND', ini, fin, bg_color)]) story.append(table) d = Drawing(400, 200) data = [(11541548, 15618561, 56416646)] bc = VerticalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = data bc.strokeColor = colors.black bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = 60000000 bc.valueAxis.valueStep = 10000000 #paso de distancia entre punto y punto bc.categoryAxis.labels.boxAnchor = 'ne' bc.categoryAxis.labels.dx = 8 bc.categoryAxis.labels.dy = -2 bc.categoryAxis.labels.angle = 0 bc.categoryAxis.categoryNames = ['2017', '2018', '2019'] bc.groupSpacing = 10 bc.barSpacing = 2 #bc.categoryAxis.style = 'stacked' # Una variación del gráfico d.add(bc) #pprint.pprint(bc.getProperties()) story.append(d)
def simple_stacked_bar_chart(): """ Creates a bar chart in a PDF """ d = Drawing(280, 250) bar = VerticalBarChart() bar.x = 50 bar.y = 85 data = [[1, 2, 3, None, None, None, 5], [10, 5, 2, 6, 8, 3, 5] ] bar.data = data bar.categoryAxis.categoryNames = ['Year1', 'Year2', 'Year3', 'Year4', 'Year5', 'Year6', 'Year7'] bar.bars[0].fillColor = colors.green bar.bars[1].fillColor = colors.blue bar.categoryAxis.labels.angle = 45 bar.categoryAxis.labels.dy = -15 bar.categoryAxis.style = 'stacked' d.add(bar, '') doc = SimpleDocTemplate('17.simple_stacked_bar_chart.pdf') story = [] story.append(d) doc.build(story)
def create_chart(self, data, y_label, d_format, cols): """Generates and returns a bar chart object""" chart = VerticalBarChart() # Create a bar chart chart.width = self.W - (self.MARGIN * 2) # Set chart width chart.height = self.H / 2 # Set chart height chart.x = self.MARGIN # Shift right to centre chart.y = (self.H / 2) - self.MARGIN # Shift up to near top chart.valueAxis.valueMin = 0 # Baseline of axes (set to 0) # Set bar colors for i in range(len(data)): chart.bars[i].fillColor = cols[i] # Add data to chart formatted_data = [] for data_item in data: formatted_data.append([data_item]) chart.data = formatted_data # Add labels to chart chart.categoryAxis.categoryNames = [y_label] chart.barLabelFormat = d_format # Format of text to display on labels chart.barLabels.nudge = 8 # Nudge labels upwards by 8px return chart
def sample1bar(data=[(13, 5, 20, 22, 37, 45, 19, 4)]): drawing = Drawing(400, 200) bc = VerticalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = data bc.strokeColor = colors.black bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = 60 bc.valueAxis.valueStep = 15 bc.categoryAxis.labels.boxAnchor = 'ne' bc.categoryAxis.labels.dx = 8 bc.categoryAxis.labels.dy = -2 bc.categoryAxis.labels.angle = 30 catNames = 'Jan Feb Mar Apr May Jun Jul Aug'.split( ' ') catNames = [n+'-99' for n in catNames] bc.categoryAxis.categoryNames = catNames drawing.add(bc) return drawing
def graphout_stackedBar(data, labels, X, Y): drawing = Drawing(X*inch, Y*inch) bar = VerticalBarChart() bar.x = 50 bar.y = 50 bar.width = (X-2)*inch bar.height = (Y-1)*inch bar.data = data bar.bars.strokeWidth = 0 bar.categoryAxis.style='stacked' bar.categoryAxis.labels.boxAnchor = 'ne' bar.categoryAxis.labels.dx = -2 bar.categoryAxis.labels.dy = -2 bar.categoryAxis.labels.angle = 45 bar.categoryAxis.categoryNames = labels # ensure bar chart and legend coloring matches for i in range(len(data)): bar.bars[i].fillColor = colorList[i] # Create a title for the y-axis yLabel = Label() yLabel.setOrigin(0, 50) # for reference, the graph origin is (50, 50) yLabel.boxAnchor = 'c' yLabel.angle = 90 yLabel.setText('Data Storage [GB]') yLabel.fontSize=16 yLabel.dy = 1.25*inch drawing.add(yLabel) drawing.add(bar) return drawing
def __init__(self, width=600, height=250, *args, **kwargs): Drawing.__init__(self, width, height, *args, **kwargs) self.add(VerticalBarChart(), name='chart') self.add(HorizontalLineChart(), name='plot') self.chart.x = 10 self.chart.y = 10 self.chart.width = 500 self.chart.height = 225 self.chart.strokeColor = None self.chart.valueAxis.valueMin = 0 #self.chart.valueAxis.valueMax = 50 #self.chart.valueAxis.valueStep = 10 self.chart.data = [(1, 2, 5), ] self.chart.categoryAxis.visible = 1 self.chart.bars[0].fillColor = colors.green self.chart.bars[1].fillColor = colors.pink self.chart.bars[2].fillColor = colors.red self.chart.categoryAxis.categoryNames = [''] self.plot.x = 10 self.plot.y = 10 self.plot.width = 500 self.plot.height = 225 self.plot.valueAxis.visible = 0 #self.plot.valueAxis.valueMin = 0 #print dir(self.plot.valueAxis) self.plot.lines[0].strokeColor = colors.blue
def sample1bar(data=[(13, 5, 20, 22, 37, 45, 19, 4), (5, 20, 22, 37, 45, 19, 4, 13), (20, 22, 37, 45, 19, 4, 13, 5)]): # sanity check: for d in data: if len(d)!=8: raise ValueError("bar chart data must have 8 elements "+repr(data)) drawing = Drawing(400, 200) bc = VerticalBarChart() bc.x = 50 bc.y = 50 bc.height = 125 bc.width = 300 bc.data = data bc.strokeColor = colors.black bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = 60 bc.valueAxis.valueStep = 15 bc.categoryAxis.labels.boxAnchor = 'ne' bc.categoryAxis.labels.dx = 8 bc.categoryAxis.labels.dy = -2 bc.categoryAxis.labels.angle = 30 catNames = 'Jan Feb Mar Apr May Jun Jul Aug'.split() catNames = [n+'-99' for n in catNames] bc.categoryAxis.categoryNames = catNames drawing.add(bc) return drawing