def to_gchart(self): from pygooglechart import ScatterChart chart = ScatterChart(800, 300, x_range=(-1, 24), y_range=(-1, 7)) chart.add_data([(h % 24) for h in range(24 * 8)]) d=[] for i in range(8): d.extend([i] * 24) chart.add_data(d) day_names = "Sun Mon Tue Wed Thu Fri Sat".split(" ") days = (0, 6, 5, 4, 3, 2, 1) sizes=[] for d in days: sizes.extend([self.h["%d %02d" % (d, h)] for h in range(24)]) sizes.extend([0] * 24) chart.add_data(sizes) #Easier to manually set the x label for the 12am/12pm labels chart.set_axis_labels('x', ['|12am|1|2|3|4|5|6|7|8|9|10|11|12pm|1|2|3|4|5|6|7|8|9|10|11|']) chart.set_axis_labels('y', [''] + [day_names[n] for n in days] + ['']) chart.add_marker(1, 1.0, 'o', '333333', 25) chart.download(self.options.filename) return chart.get_url()
def buildScatterChart(self, data, xKey, yKey, x_range=None, y_range=None, buildLabels=False): chart = ScatterChart(self.defaultWidth, self.defaultHeight, x_range=x_range, y_range=y_range) xData = list() yData = list() for item in data: xData.append(item[xKey]) yData.append(item[yKey]) if not x_range: x_range = (0, max(xData)) if not y_range: y_range = (0, max(yData)) chart.add_data(xData) chart.add_data(yData) if buildLabels: chart.set_axis_labels('x', self.buildLabels(x_range)) chart.set_axis_labels('y', self.buildLabels(y_range)) return chart
def scatter_random_marker_sizes(): chart = ScatterChart(settings.width, settings.height, x_range=(0, 100), y_range=(0, 100)) chart.add_data(helper.random_data()) chart.add_data(helper.random_data()) chart.add_data(helper.random_data()) chart.download('scatter-random-marker-sizes.png')
def to_gchart(self): from pygooglechart import ScatterChart chart = ScatterChart(800, 300, x_range=(-1, 24), y_range=(-1, 7)) chart.add_data([(h % 24) for h in range(24 * 8)]) d = [] for i in range(8): d.extend([i] * 24) chart.add_data(d) day_names = "Sun Mon Tue Wed Thu Fri Sat".split(" ") days = (0, 6, 5, 4, 3, 2, 1) sizes = [] for d in days: sizes.extend([self.h["%d %02d" % (d, h)] for h in range(24)]) sizes.extend([0] * 24) chart.add_data(sizes) chart.set_axis_labels('x', [''] + [str(h) for h in range(24)] + ['']) chart.set_axis_labels('y', [''] + [day_names[n] for n in days] + ['']) chart.add_marker(1, 1.0, 'o', '333333', 25) return chart.get_url() + '&chds=-1,24,-1,7,0,20'
def run(self, serial, tag, tagname, pagename, soup, request, response): width = 384 height = 512 buckets = self.ac.indexer.hitmap.getBuckets() # transpose data (we might be doing sampling at a different interval, and # here we want weekday:hour slots) self.data = {} for t in buckets.keys(): slot = time.strftime("%2w%2H", time.localtime(int(t))) if slot in self.data.keys(): self.data[slot] = self.data[slot] + buckets[t] else: self.data[slot] = buckets[t] grid = {'x': [0 for x in range(6)], 'y': [0 for y in range(23)]} x = [] y = [] z = [] buffer = [] for slot in self.data.keys(): x.append(1 + int(slot[0:2])) y.append(24 - int(slot[2:4])) z.append(int(self.data[slot])) chart = ScatterChart(width, height, x_range=(0, 7), y_range=(0, 25)) chart.add_data(x) chart.add_data(y) chart.add_data(z) chart.set_axis_labels(Axis.LEFT, [''] + ["%02dh" % (23 - x) for x in range(24)] + ['']) chart.set_axis_labels( Axis.TOP, ['', 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']) chart.add_marker(0, 1.0, 'o', '00e0e040', 50) buffer.append('<img alt="Google Scatter Chart" src="%s">' % chart.get_url()) tag.replaceWith(u''.join(buffer))
def create_google_scatter_chart(file, x_values, y_values, z_values, x_label='x', y_label='y'): x_max = max(x_values) y_max = max(y_values) z_max = max(z_values) chart = ScatterChart(600, 300, x_range=(0, x_max), y_range=(0, y_max)) chart.set_legend(['speed in mbps']) left_axis = range(0, y_max + 1, 4) left_axis[0] = '' left_axis[-1] = y_label chart.set_axis_labels(Axis.LEFT, left_axis) bottom_axis = range(0, x_max + 1, 4) bottom_axis[0] = '' bottom_axis[-1] = x_label chart.set_axis_labels(Axis.BOTTOM, bottom_axis) chart.add_data(x_values) chart.add_data(y_values) chart.add_data(z_values) return chart.get_url(None)
def buildTagBuddiesWallPosterScatterChart(self, data): chart = ScatterChart(self.defaultWidth, self.defaultHeight) xData = list() yData = list() for item in data.values(): xData.append(item[0]) yData.append(item[1]) chart.add_data(xData) chart.add_data(yData) chart.set_axis_labels('x', self.buildLabels((0, max(xData)))) chart.set_axis_labels('y', self.buildLabels((0, max(yData)))) chart.set_title('Wall Posts - Common Photo Tags') return chart
def scatter_circle(): chart = ScatterChart(settings.width, settings.height, x_range=(0, 100), y_range=(0, 100)) steps = 40 xradius = 25 yradius = 45 xmid = 50 ymid = 50 xlist = [] ylist = [] for angle in xrange(0, steps + 1): angle = float(angle) / steps * math.pi * 2 xlist.append(math.cos(angle) * xradius + xmid) ylist.append(math.sin(angle) * yradius + ymid) chart.add_data(xlist) chart.add_data(ylist) chart.add_data(range(len(ylist))) chart.add_marker(0, 1.0, 'o', '00ff00', 10) chart.download('scatter-circle.png')
def generate_chart(cls, data, width=950, height=300): """ Gets a github style punchcard chart. Hat tip: http://github.com/dustin/bindir/blob/master/gitaggregates.py """ no_data = not data try: from pygooglechart import ScatterChart except ImportError: raise Exception("WorkerActivityTimes requires pygooglechart.") chart = ScatterChart(width, height, x_range=(-1, 24), y_range=(-1, 7)) chart.add_data([(h % 24) for h in range(24 * 8)]) d = [] for i in range(8): d.extend([i] * 24) chart.add_data(d) # mapping between numbers 0..6 and its day of the week label day_names = "Sun Mon Tue Wed Thu Fri Sat".split(" ") # the order, bottom-to-top, in which the days should appear # i.e. Sun, Sat, Fri, Thu, etc days = (0, 6, 5, 4, 3, 2, 1) sizes = [] for d in days: sizes.extend([data[(d, h)] for h in range(24)]) sizes.extend([0] * 24) if no_data: # fill in a line out of view so that chart.get_url() doesn't crash sizes.extend([1] * 24) chart.add_data(sizes) chart.set_axis_labels('x', [''] + [str(h) for h in range(24)] + ['']) chart.set_axis_labels('y', [''] + [day_names[n] for n in days] + ['']) chart.add_marker(1, 1.0, 'o', '333333', 25) return chart.get_url() + '&chds=-1,24,-1,7,0,20'