column_chart.py revision e55d35ee104a41e5f7ae96f4e326f33f6beaf412
1# Copyright 2011 Google Inc. All Rights Reserved. 2 3"""Module to draw column chart.""" 4 5class ColumnChart(object): 6 """class to draw column chart.""" 7 def __init__(self, title, width, height): 8 self.title = title 9 self.chart_div = filter(str.isalnum, title) 10 self.width = width 11 self.height = height 12 self.columns = [] 13 self.rows = [] 14 self.series = [] 15 16 def AddSeries(self, column_name, series_type, color): 17 for i in range(len(self.columns)): 18 if column_name == self.columns[i][1]: 19 self.series.append((i - 1, series_type, color)) 20 break 21 22 def AddColumn(self, name, column_type): 23 self.columns.append((column_type, name)) 24 25 def AddRow(self, row): 26 self.rows.append(row) 27 28 def GetJavascript(self): 29 res = "var data = new google.visualization.DataTable();\n" 30 for column in self.columns: 31 res += "data.addColumn('%s', '%s');\n" % column 32 res += "data.addRows(%s);\n" % len(self.rows) 33 for row in range(len(self.rows)): 34 for column in range(len(self.columns)): 35 val = self.rows[row][column] 36 if isinstance(val, str): 37 val = "'%s'" % val 38 res += "data.setValue(%s, %s, %s);\n" % (row, column, val) 39 40 series_javascript = "" 41 for series in self.series: 42 series_javascript += "%s: {type: '%s', color: '%s'}, " % series 43 44 chart_add_javascript = """ 45var chart_%s = new google.visualization.ComboChart( 46 document.getElementById('%s')); 47chart_%s.draw(data, {width: %s, height: %s, title: '%s', legend: 'none', 48 seriesType: "bars", lineWidth: 0, pointSize: 5, series: {%s}, 49 vAxis: {minValue: 0}}) 50""" 51 res += chart_add_javascript % (self.chart_div, self.chart_div, 52 self.chart_div, self.width, 53 self.height, self.title, series_javascript) 54 return res 55 56 def GetDiv(self): 57 return "<div id='%s' class='chart'></div>" % self.chart_div 58