示例#1
0
def makeStackedBarChart(barchartData, barChartColors, max_y, maxCol):        
        
        from pygooglechart import Axis
        from pygooglechart import StackedVerticalBarChart

        #depending on the maxCol value set the max value of the Y axis so that the graphics is OK even for the biggest column
        maxY = max_y
        left_axis = range(0, maxY + 1, max_y/5)

        if maxCol < 50:
            maxY = 50
            left_axis = range(0, maxY + 1, 10)
        elif maxCol > 50 and maxCol <= 100:      
            maxY = 100
            left_axis = range(0, maxY + 1, 20)  
        elif maxCol > 100 and maxCol <= 200:
            maxY = 200
            left_axis = range(0, maxY + 1, 40)
        elif maxCol > 200 and maxCol <= 300:
            maxY = 300
            left_axis = range(0, maxY + 1, 60)
        elif maxCol > 300 and maxCol <= 400:                         
            maxY = 400
            left_axis = range(0, maxY + 1, 80)
        elif maxCol > 400 and maxCol <= 500:                         
            maxY = 500
            left_axis = range(0, maxY + 1, 100)
        elif maxCol > 500 and maxCol <= 600:                         
            maxY = 600
            left_axis = range(0, maxY + 1, 120)
        elif maxCol > 600 and maxCol <= 900:                         
            maxY = 900
            left_axis = range(0, maxY + 1, 180)
        elif maxCol > 900 and maxCol <= 3000:
            maxY = 3000
            left_axis = range(0, maxY + 1, 600)                
        elif maxCol > 3000 and maxCol <= 6000:
            maxY = 6000
            left_axis = range(0, maxY + 1, 1200)
        elif maxCol > 6000 and maxCol <= 9000:
            maxY = 9000
            left_axis = range(0, maxY + 1, 1800)
        elif maxCol > 9000 and maxCol <= 12000:                 
            maxY = 12000
            left_axis = range(0, maxY + 1, 2400)        
        elif maxCol > 12000 and maxCol <= 15000:                 
            maxY = 15000
            left_axis = range(0, maxY + 1, 3000)                
        elif maxCol > 15000 and maxCol <= 18000:
            maxY = 18000
            left_axis = range(0, maxY + 1, 3600) 
        elif maxCol > 18000 and maxCol <= 30000:
            maxY = 30000
            left_axis = range(0, maxY + 1, 6000) 
        elif maxCol > 30000 and maxCol <= 39000:
            maxY = 39000
            left_axis = range(0, maxY + 1, 7800) 
        elif maxCol > 39000 and maxCol <= 50000:
            maxY = 50000
            left_axis = range(0, maxY + 1, 10000)       
        elif maxCol > 50000 and maxCol <= 80000:
            maxY = 80000
            left_axis = range(0, maxY + 1, 16000)               
        elif maxCol > 80000 and maxCol <= 100000:
            maxY = 100000
            left_axis = range(0, maxY + 1, 20000) 
        elif maxCol > 100000 and maxCol <= 120000:
            maxY = 120000
            left_axis = range(0, maxY + 1, 24000) 
        elif maxCol > 120000 and maxCol <= 150000:
            maxY = 150000
            left_axis = range(0, maxY + 1, 30000) 
        elif maxCol > 150000 and maxCol <= 180000:
            maxY = 180000
            left_axis = range(0, maxY + 1, 36000) 
        elif maxCol > 180000 and maxCol <= 210000:
            maxY = 210000
            left_axis = range(0, maxY + 1, 42000) 
        else:
            maxY = 250000
            left_axis = range(0, maxY + 1, 50000) 

        barchart = None

        #depending on the number of periods set the width of the chart and width of the bars in the chart
        if numberPeriods < 20:
            barchart = StackedVerticalBarChart(50*numberPeriods, 150, y_range=(0, maxY))
            barchart.set_bar_width(23)        
        else:
            barchart = StackedVerticalBarChart(1000, 150, y_range=(0, maxY))        
            barchart.set_bar_width(20)        
                
        #set the data
        for data in barchartData:        
            barchart.add_data(data)

        #get the labes of the X axis - these are the time periods
        bottomAxisLabels = getBottomAxisLabels()

        #make 5 horizontal lines crossing the Y axis
        barchart.set_grid(0, 20)
        #set the colors of the time charts
        barchart.set_colours(barChartColors)
        
        #at (0,0) do not set a label, set the X and Y axis
        left_axis[0] = ''
        barchart.set_axis_labels(Axis.LEFT, left_axis)        
        barchart.set_axis_labels(Axis.BOTTOM, bottomAxisLabels)

        return (barchart, maxY, barChartColors)