def horizontal_bar_graph(self): """ Draws a horizontal bar chart :return: horizontal bar chart """ drawing = Drawing(200, 50) graph = HorizontalBarChart() graph.x = self.graph_x graph.y = self.graph_y graph.width = self.width graph.height = self.height graph.valueAxis.valueMin = self.value_min graph.valueAxis.valueMax = self.value_max graph.valueAxis.valueStep = self.value_step graph.data = self.data graph.categoryAxis.categoryNames = self.categories graph.barLabels.nudge = 15 graph.barLabelFormat = '%d' graph.barLabels.dx = 0 graph.barLabels.dy = 7 graph.barLabels.boxAnchor = 'n' graph.barLabels.fontName = 'Vera' graph.barLabels.fontSize = 10 graph.bars[0].fillColor = PCMYKColor(45, 45, 0, 0, alpha=85) graph.bars[1].fillColor = PCMYKColor(64, 75, 0, 18, alpha=95) graph.bars.fillColor = PCMYKColor(64, 62, 0, 18, alpha=85) drawing.add(graph, '') return [drawing]
def get_studentPRChart(studentEvaluation, showPercentValue=False): pr_items = _get_pr_items(studentEvaluation) row_data = [] row_barLabel = [] categories = [] '''这是一个Hack,因为Chart绘制的顺序和预期的不同。''' pr_items = reversed(pr_items) for item in pr_items: row_data.append(item.p_value) if showPercentValue: barLabel = '%s%%(%s %s)' % (item.p_value, item.e_value, item.e_unit) else: barLabel = '%s%%' % (item.p_value, ) row_barLabel.append(barLabel) categories.append(item.name) data = [row_data] labels = [row_barLabel] drawing = Drawing(14 * cm, 6 * cm) bc = HorizontalBarChart() bc.x = 1.5 * cm bc.y = 0 bc.width = drawing.width - bc.x bc.height = drawing.height bc.data = data bc.bars.strokeColor = None bc.bars[0].fillColor = colors.HexColor('#7fd8ff') bc.barLabelFormat = 'values' bc.barLabelArray = labels bc.barLabels.boxAnchor = 'w' bc.barLabels.fixedEnd = LabelOffset() bc.barLabels.fixedEnd.posMode = 'low' bc.barLabels.fontName = 'Microsoft-YaHei-Light' bc.barLabels.fontSize = 8 bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = 100 bc.valueAxis.valueStep = 10 bc.valueAxis.labels.fontName = 'Microsoft-YaHei-Light' bc.valueAxis.labels.fontSize = 8 bc.categoryAxis.categoryNames = categories bc.categoryAxis.labels.boxAnchor = 'w' bc.categoryAxis.labels.dx = -1.5 * cm bc.categoryAxis.labels.fontName = 'Microsoft-YaHei-Light' bc.categoryAxis.labels.fontSize = 8 bc.categoryAxis.visibleAxis = 0 bc.categoryAxis.visibleTicks = 0 drawing.add(bc) return drawing
def draw_bar_plot(self, data, names): d = Drawing(50, 100) bar = HorizontalBarChart() bar.data = data bar.x = 180 bar.y = 0 bar.categoryAxis.categoryNames = names bar.valueAxis.valueMin = 0 bar.valueAxis.valueMax = 100 bar.bars[0].fillColor = self.rgb_to_color_obj((65, 182, 230)) bar.barLabels.angle = 0 bar.barLabelFormat = DecimalFormatter(2, suffix='%') bar.barLabels.dx = 20 d.add(bar, '') self.content.append(self.small_space) self.content.append(d) self.content.append(self.large_space)
def generate_page1(c): #Image---------------------------------------------------------------------- im1 = Image.open("left.jpg") c.drawInlineImage(im1, 10, 15, width=546 / 2.3, height=1290 / 2.3) im2 = Image.open("shinken.jpg") c.drawInlineImage(im2, 259, height - 183, width=2434 / 4.4, height=725 / 4.4) im3 = Image.open("skor.jpg") c.drawInlineImage(im3, 259, height - 251, width=2335 / 4.2, height=271 / 4.2) im4 = Image.open("diagram.jpg") c.drawInlineImage(im4, 259, 15, width=2339 / 4.2, height=1367 / 4.2) #grafik1---------------------------------------------------------------------- from reportlab.graphics.shapes import Drawing from reportlab.graphics.charts.barcharts import HorizontalBarChart drawing = Drawing(500, 250) data = [(N1, N2, N3, N4, N5, N6, N7, N8, N9, N10, N11, N12, N13, N14, N15, N16, N17)] bc = HorizontalBarChart() bc.x = 100 bc.y = 100 bc.height = 250 bc.width = 300 bc.data = data bc.strokeColor = None bc.fillColor = None # bc.bars[0].fillColor = PCMYKColor(92,47,0,33,alpha=95) # bc.bars[0].strokeColor = PCMYKColor(92,47,0,33,alpha=95) # bc.bars[0].fillColor = PCMYKColor(92,32,0,33,alpha=95) # bc.bars[0].strokeColor = PCMYKColor(92,32,0,33,alpha=95) bc.bars[0].fillColor = PCMYKColor(92, 16, 0, 33, alpha=95) bc.bars[0].strokeColor = PCMYKColor(92, 16, 0, 33, alpha=95) # bc.bars[0].fillColor = PCMYKColor(92,7,0,33,alpha=95) # bc.bars[0].strokeColor = PCMYKColor(92,7,0,33,alpha=95) bc.barWidth = 15 bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = 100 bc.valueAxis.valueStep = 10 bc.valueAxis.visibleAxis = False bc.valueAxis.visibleGrid = False bc.valueAxis.visibleTicks = False bc.valueAxis.forceZero = True bc.valueAxis.visibleLabels = 0 bc.categoryAxis.visibleGrid = False bc.categoryAxis.visibleTicks = False # hidding the ticks remove the label bc.categoryAxis.tickLeft = 0 # a workaround is to set the tick length bc.categoryAxis.tickRight = 0 # to zero. bc.categoryAxis.strokeWidth = 0.25 bc.categoryAxis.labelAxisMode = 'low' bc.categoryAxis.labels.textAnchor = 'end' bc.categoryAxis.labels.angle = 0 bc.categoryAxis.labels.fontName = 'Designosaur-Regular' #bc.categoryAxis.labels.fontColor = PCMYKColor(0,65,100,0,alpha=90) bc.categoryAxis.labels.boxAnchor = 'e' bc.categoryAxis.labels.dx = -5 bc.categoryAxis.labels.dy = 0 bc.categoryAxis.labels.angle = 0 bc.categoryAxis.reverseDirection = 1 bc.categoryAxis.joinAxisMode = 'left' bc.categoryAxis.categoryNames = [ NN1, NN2, NN3, NN4, NN5, NN6, NN7, NN8, NN9, NN10, NN11, NN12, NN13, NN14, NN15, NN16, NN17 ] bc.barLabels.fontName = 'Designosaur-Regular' bc.barLabels.fontSize = 10 bc.barLabels.angle = 0 bc.barLabelFormat = "%.00f%%" bc.barLabels.boxAnchor = 'w' bc.barLabels.boxFillColor = None bc.barLabels.boxStrokeColor = None bc.barLabels.dx = 10 bc.barLabels.dy = 0 #bc.barLabels.dy = -1 bc.barLabels.boxTarget = 'hi' drawing.add(bc) drawing.wrapOn(c, width, height) drawing.drawOn(c, 350, height - 650) #Table--------------------------------------------------------------------- styleBH = styles["Normal"] styleBH.alignment = TA_CENTER styleBH.fontSize = 12 styleBH.fontName = 'Designosaur-Regular' #styleBH.textColor = PCMYKColor(92,7,0,33,alpha=100) isi1 = Paragraph(nama, styleBH) isitabel1 = [[isi1]] table1 = Table(isitabel1, colWidths=[150]) table1.wrapOn(c, width, height) table1.drawOn(c, 54, height - 352) isi2 = Paragraph(kelas, styleBH) isitabel2 = [[isi2]] table2 = Table(isitabel2, colWidths=[150]) table2.wrapOn(c, width, height) table2.drawOn(c, 54, height - 386) isi3 = Paragraph(sekolah, styleBH) isitabel3 = [[isi3]] table3 = Table(isitabel3, colWidths=[150]) table3.wrapOn(c, width, height) table3.drawOn(c, 54, height - 421) isi4 = Paragraph(outlet, styleBH) isitabel4 = [[isi4]] table4 = Table(isitabel4, colWidths=[150]) table4.wrapOn(c, width, height) table4.drawOn(c, 54, height - 455) #Text---------------------------------------------------------------------- #nilai total c.setFillColor(white) c.setStrokeColor(white) if (NTotal == '10.0'): c.setFont("Designosaur-Regular", 35) c.drawString(352, height - 230, NTotal + "/") c.setFont("Designosaur-Regular", 20) c.drawString(395, height - 235, "10") else: c.setFont("Designosaur-Regular", 35) c.drawString(338, height - 230, NTotal + "/") c.setFont("Designosaur-Regular", 20) c.drawString(415, height - 235, "10") #Yang paling tidak dikuasai siswa c.setFont("Designosaur-Regular", 9) c.drawString( 576, height - 205, "Topik yang paling tidak dikuasai peserta Try-Out II :" ) c.drawString(576, height - 216, "1. Mean, Median, dan Modus") c.drawString(576, height - 227, "2. Debit Air") c.drawString(576, height - 238, "3. Bangun Ruang")