def GetHtml(self): max = self._GetRescaledMax(self.__max) w = self.__width h = self.__height # We don't really care about StackedVerticalBarChart vs. # GroupedVerticalBarChart since we just have one data-set, but only the # stacked graph seems to respect the bar spacing option chart = StackedVerticalBarChart(w, h) # Compute bar width so that it fits in the overall graph width. bucket_width = (w - _Y_AXIS_SPACE) / len(self.__buckets) bar_width = bucket_width * 4 / 5 space_width = bucket_width - bar_width chart.set_bar_width(bar_width) chart.set_bar_spacing(space_width) chart.add_data(self._GetRescaledData(self.__buckets, max)) chart.set_axis_range(Axis.LEFT, 0, max) chart.set_axis_labels(Axis.BOTTOM, self._GetBucketLabels()) # We render the title in the template instead of in the chart, to give # stat collections and individual stats similar appearance t = Template(file="templates/bucket-stat.tmpl", searchList={ "id": self.id, "title": self.__title, "width": w, "height": h, "chart_url": chart.get_url() }) return unicode(t)
def stacked_vertical(): chart = StackedVerticalBarChart(settings.width, settings.height, y_range=(0, 35)) chart.set_bar_width(10) chart.set_colours(['00ff00', 'ff0000']) chart.add_data([1,2,3,4,5]) chart.add_data([1,4,9,16,25]) chart.download('bar-vertical-stacked.png')
def graph_multiple_choice(q): #question = get_object_or_404(Question, pk=q.pk) question = Question.objects.get(pk=q.pk) # collect answers to this question answers = Answer.objects.filter(question=question).order_by('choice') # old code for handling any number of choices # choices = { " " : 0 } # choices = choices.fromkeys(xrange(len(answers)), 0) # hardcode of four choices since ui limits to four choices = {1: 0, 2: 0, 3: 0, 4: 0} # grab the parsed entries for this question entries = Entry.objects.filter(question=question,\ is_unparseable=False) # i'm assuming here that the Entry.text is the # same thing as the Answer.choice, presumably # a number for each choice 1 through n # # iterate entries and tally the choices for e in entries: if int(e.text) in choices: choices[int(e.text)] += 1 choice_counts = sortedDictValues1(choices) # collect the long, textual representation # of the answer choice for labelling the graph # along with the choice counts of each choice # for display on large graphs long_answers_big = [] long_answers_small = [] for a in answers: long_answers_small.append(a.text) long_answers_big.append(a.text + ' (' + str(choices[int(a.choice)]) + ')') for size in GRAPH_SIZES: # configure and save the graph bar = StackedVerticalBarChart(int(size), golden(int(size)),\ y_range=(0, max(choice_counts))) bar.set_colours([choice(['0091C7', '0FBBD0'])]) bar.add_data(choice_counts) bar.set_bar_width(int(int(size) / (len(choices) + 1))) if (size == GRAPH_SIZES[0]): index = bar.set_axis_labels(Axis.BOTTOM, long_answers_small) else: index = bar.set_axis_labels(Axis.BOTTOM, long_answers_big) bar.set_axis_style(index, '202020', font_size=9, alignment=0) filename = GRAPH_DIR + str(question.pk) + '-' + size + '-entries.png' bar.download(filename) print 'saved ' + filename return 'graphed entries ' + question.text
def makechart(): global name, width, height, bar_width totaltime = [0.0] * len(categories) totalmeetingtime = [0.0] * len(categories) allcategories = [""] * len(categories) i = 0 max = 0 for x in categories: mtime = 0.0 allcategories[i] = x[0:9] if categories[x] > max: max = categories[x] if x in meetingcategories: mtime = meetingcategories[x] totalmeetingtime[i] = mtime totaltime[i] = categories[x] - mtime i += 1 max = int(math.ceil(max / 100.0) * 100) part = int(max / 4) bar_width = int(width / (len(categories) + 4.5)) #general chart properties chart = StackedVerticalBarChart(width, height, y_range=(0, max)) chart.set_title('Working Hours in ' + get_month(name)) chart.set_legend(['Tasks', 'Meetings']) chart.set_bar_width(bar_width) #left label leftlabel = chart.set_axis_labels(Axis.LEFT, [0, part, part * 2, part * 3, max]) chart.set_axis_style(leftlabel, '202020', font_size=10, alignment=0) #chart.set_axis_positions(leftlabel, [50]) #bottom label bottomlabel = chart.set_axis_labels(Axis.BOTTOM, allcategories) chart.set_axis_style(bottomlabel, '202020', font_size=10, alignment=0) #colors and data chart.set_colours(['00ff00', 'ff0000']) chart.add_data(totaltime) chart.add_data(totalmeetingtime) #get it chart.download(name + '.png')
def graph_test_vector(candidates, data, directory, title, y_axis): if len(candidates) != len(data): raise AttributeError('Length of candidates and data does not match') chart = StackedVerticalBarChart(700, 428, auto_scale=False, custom_scaling=True) chart.set_bar_width(41) chart.set_colours(('3366CC', '000000')) chart.add_data(data) chart.set_axis_range('y', 0, max(data) + 0.1 * max(data)) chart.set_axis_labels('x', candidates) x_title_index = chart.set_axis_labels('x', ['Candidate']) y_title_index = chart.set_axis_labels('y', [y_axis]) chart.set_axis_positions(x_title_index, [50]) chart.set_axis_positions(y_title_index, [50]) chart.set_title(title) # (dataset, all bars, formating, colour, width) chart.add_marker(0, -1, 'N', '000000', 11) chart.download(os.path.join(directory, '%s.png' % title.replace(' ', '')))
def _bar_graph(data, legends, axis_labels, size, steps, type=StackedVerticalBarChart, multiline=False): if multiline: max_values = [] min_values = [] for row in data: max_values.append(max(row)) min_values.append(min(row)) max_value = max(max_values) min_value = min(min_values) else: max_value = max(data) min_value = min(data) #validando si hay datos para hacer grafico if max_value == 0: return None step = ((max_value * 1.05) - (min_value * 0.95)) / steps #validando en caso de el paso sea menor que uno y de cero en la conversion if step < 1: step = 1 tope = int(round(max_value * 1.05)) if tope < max_value: tope += 2 else: tope += 1 left_axis = range(int(round(min_value * 0.95)), tope, int(step)) left_axis[0] = '' if type == StackedHorizontalBarChart: graph = StackedHorizontalBarChart(size[0], size[1], x_range=(0, max_value * 1.05)) graph.set_axis_labels(Axis.BOTTOM, left_axis) if axis_labels: graph.set_axis_labels(Axis.LEFT, axis_labels) elif type == StackedVerticalBarChart: graph = StackedVerticalBarChart(size[0], size[1], y_range=(0, max_value * 1.05)) graph.set_axis_labels(Axis.LEFT, left_axis) if axis_labels: graph.set_axis_labels(Axis.BOTTOM, axis_labels) elif type == GroupedHorizontalBarChart: graph = GroupedHorizontalBarChart(size[0], size[1], x_range=(0, max_value * 1.05)) graph.set_axis_labels(Axis.BOTTOM, left_axis) if axis_labels: graph.set_axis_labels(Axis.LEFT, axis_labels) graph.set_bar_spacing(5) elif type == GroupedVerticalBarChart: graph = GroupedVerticalBarChart(size[0], size[1], y_range=(0, max_value * 1.05)) graph.set_axis_labels(Axis.LEFT, left_axis) if axis_labels: graph.set_axis_labels(Axis.BOTTOM, axis_labels) graph.set_bar_spacing(5) else: pass #raise exception if multiline: for fila in data: graph.add_data(fila) else: graph.add_data(data) graph.set_colours( ['FFBC13', '22A410', 'E6EC23', '2B2133', 'BD0915', '3D43BD']) graph.set_bar_width(44) graph.set_legend(legends) graph.set_legend_position('b') return graph
scraperwiki.sqlite.attach(sourcescraper, "src") sdata = scraperwiki.sqlite.execute( "select Year, Dates, State, Location, Mortality from src.swdata WHERE Mortality > 1000" ) rows = sdata.get("data") print rows # for row in rows: # pm10val = int(rows[4]) # print pm10val pm10val = int(rows[0][4]) colour = 'ad0000' # Draw the bar chart chart = StackedVerticalBarChart(150, 200, y_range=(0, 4000)) chart.set_colours([colour, 'ffffff', 'ffffff']) chart.set_bar_width(40) chart.add_data([0, pm10val, 0]) chart.add_data([35, 1, 1]) chart.add_data([1, 1, 1]) chart.set_axis_labels(Axis.LEFT, [0, 25, 50]) chart.add_marker(1, 0, 'tLimit (35)', 'ad0000', 11) chart.add_marker(0, 1, 'fSo far (%s)' % (pm10val), colour, 11) chart.add_marker(0, 2, 'tSafe (0)', '45bb00', 11) #print '<img src="%s"></img>' % chart.get_url() import scraperwiki.sqlite from pygooglechart import StackedVerticalBarChart, Axis # Get data sourcescraper = 'annual_animal_deaths'
def __bar_graphic__(data, legends, axis_labels, size, steps, type=StackedVerticalBarChart, multiline=False): if multiline: max_values = [] min_values = [] for row in data: max_values.append(max(row)) min_values.append(min(row)) max_value = max(max_values) min_value = min(min_values) else: max_value = max(data) min_value = min(data) step = ((max_value * 1.05) - (min_value * 0.95)) / steps left_axis = range(int(min_value * 0.95), int(max_value * 1.05), int(step)) left_axis[0] = '' if type == StackedHorizontalBarChart: graph = StackedHorizontalBarChart(size[0], size[1], x_range=(0, max_value * 1.05)) graph.set_axis_labels(Axis.BOTTOM, left_axis) graph.set_axis_labels(Axis.LEFT, axis_labels) elif type == StackedVerticalBarChart: graph = StackedVerticalBarChart(size[0], size[1], y_range=(0, max_value * 1.05)) graph.set_axis_labels(Axis.LEFT, left_axis) graph.set_axis_labels(Axis.BOTTOM, axis_labels) elif type == GroupedHorizontalBarChart: graph = GroupedHorizontalBarChart(size[0], size[1], x_range=(0, max_value * 1.05)) graph.set_axis_labels(Axis.BOTTOM, left_axis) graph.set_axis_labels(Axis.LEFT, axis_labels) graph.set_bar_spacing(5) elif type == GroupedVerticalBarChart: graph = GroupedVerticalBarChart(size[0], size[1], y_range=(0, max_value * 1.05)) graph.set_axis_labels(Axis.LEFT, left_axis) graph.set_axis_labels(Axis.BOTTOM, axis_labels) graph.set_bar_spacing(5) else: pass #raise exception if multiline: for fila in data: graph.add_data(fila) else: graph.add_data(data) graph.set_colours( ['FFBC13', '22A410', 'E6EC23', '2B2133', 'BD0915', '3D43BD']) graph.set_bar_width(40) graph.set_legend(legends) graph.set_legend_position('b') return graph