Пример #1
0
    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))]
Пример #2
0
    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
Пример #3
0
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
Пример #4
0
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)
Пример #5
0
    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))
Пример #6
0
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
Пример #7
0
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)
Пример #8
0
    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
Пример #9
0
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)
Пример #11
0
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)
Пример #12
0
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
Пример #13
0
    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
Пример #14
0
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
Пример #15
0
    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
Пример #16
0
        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
Пример #17
0
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
Пример #18
0
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
Пример #20
0
    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')
Пример #21
0
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)
Пример #22
0
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
Пример #23
0
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
Пример #24
0
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)
Пример #25
0
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
Пример #27
0
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
Пример #28
0
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
Пример #29
0
    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
Пример #30
0
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