def get(self): list = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep'] list2 = [] for title in list: list2.append(int(getdata(title, 'funds').custom['amount'].text)) max_y = 10000 chart = SimpleLineChart(200, 125, y_range=[0, max_y]) chart.add_data([2000, 3000, 5000, 1200, 5000, 4000, 1000, 3000, 5900]) # Set the line colour to blue chart.set_colours(['0000FF']) # Set the vertical stripes chart.fill_linear_stripes(Chart.CHART, 0, 'CCCCCC', 0.2, 'FFFFFF', 0.2) # Set the horizontal dotted lines chart.set_grid(0, 25, 5, 5) # The Y axis labels contains 0 to 100 skipping every 25, but remove the # first number because it's obvious and gets in the way of the first X # label. left_axis = range(0, max_y + 1, 25) left_axis[0] = '' chart.set_axis_labels(Axis.LEFT, left_axis) # X axis labels chart.set_axis_labels(Axis.BOTTOM, list) url2 = chart.get_url() self.response.out.write( template.render('template/donate.html', { 'url2': url2, }))
def simpleChart3(bottom_labels, data1, data2): datamin, datamax = min(min(data1, data2)), max(max(data1, data2)) datamin = int(datamin - 0.5) datamax = int(datamax + 0.5) chart = SimpleLineChart(200, 125, y_range=[datamin, datamax]) chart.add_data(data1) chart.add_data(data2) left_axis = [datamin, 0, datamax] left_axis[0] = '' # no label at 0 chart.set_axis_labels(Axis.LEFT, left_axis) chart.set_axis_labels(Axis.BOTTOM, bottom_labels) chart.set_axis_labels(Axis.BOTTOM, ['X Axis']) # second label below first one chart.set_axis_positions( 2, [50.0]) # position, left is 0., right is 100., 50. is center # Set the line colour chart.set_colours(['0000FF', 'FF0000']) # Set the horizontal dotted lines chart.set_grid(0, 25, 5, 5) # Set vertical stripes stripes = ['CCCCCC', 0.2, 'FFFFFF', 0.2] chart.fill_linear_stripes(Chart.CHART, 0, *stripes) return chart
def velocity_chart(self): graph_width = 600 graph_height = 300 x_max = self.total_iterations y_max = max(max(self.estimate_stories_data()), max(self.estimate_tasks_data()), max(self.work_data())) chart = SimpleLineChart(graph_width, graph_height, x_range=(1, x_max + 1), y_range=(0, y_max + 1)) chart.add_data(self.estimate_stories_data()) chart.add_data(self.estimate_tasks_data()) chart.add_data(self.work_data()) chart.set_grid(0, 100.0 / y_max + 1, 5, 5) chart.set_colours(['FF0000', '00FF00', '0000FF']) chart.set_legend( [_('rough story estimates'), _('task estimates'), _('worked')]) chart.set_legend_position('b') chart.set_axis_labels(Axis.LEFT, ['', '', _('days')]) chart.set_axis_labels(Axis.BOTTOM, list(range(1, x_max + 1))) chart.set_axis_range(Axis.LEFT, 0, y_max + 1) return chart.get_url(data_class=ExtendedData)
def gchart(data, node, check, metric, start=datetime.now() - timedelta(days=1), end=datetime.now()): d = [] ts = [] for p in data['metrics'][0]['data']: d.append(float(p['avg'])) ts.append(p['ts']) # Chart size of 200x125 pixels and specifying the range for the Y axis max_y = int(max(d)) chart = SimpleLineChart(450, 250, y_range=[0, max_y]) chart.add_data(d) left_axis = range(0, max_y + 1, max_y / 5) left_axis[0] = '' chart.set_axis_labels(Axis.LEFT, left_axis) min_dt = datetime.fromtimestamp(min(ts)) max_dt = datetime.fromtimestamp(max(ts)) chart.set_axis_labels(Axis.BOTTOM, [str(min_dt), str(max_dt)]) title = '%s.%s.%s' % (node['name'], check['type'], metric) chart.set_title(title) return chart.get_url()
def simpleChart2(bottom_labels, data): # round min and max to nearest integers datamin = int(min(data) - 0.5) datamax = int(max(data) + 0.5) chart = SimpleLineChart(200, 125, y_range=[datamin, datamax]) chart.add_data(data) left_axis = ['min', 0, 'max'] chart.set_axis_labels(Axis.LEFT, left_axis) chart.set_axis_labels(Axis.BOTTOM, bottom_labels) chart.set_axis_labels(Axis.BOTTOM, ['X Axis']) # second label below first one chart.set_axis_positions( 2, [50.0]) # position, left is 0., right is 100., 50. is center # Set the line colour chart.set_colours(['0000FF']) # Set the horizontal dotted lines chart.set_grid(0, 25, 5, 5) # Set vertical stripes stripes = ['CCCCCC', 0.2, 'FFFFFF', 0.2] chart.fill_linear_stripes(Chart.CHART, 0, *stripes) return chart
def create_graph(self, particle_data, time_data): # Set the vertical range from 0 to 2 max_y = 2 # Chart size of 500x500 pixels and specifying the range for the Y axis chart = SimpleLineChart(500, 500, y_range=[0, max_y]) # Add the chart data data = particle_data chart.add_data(data) # Set the line color blue chart.set_colours(['0000FF']) # Set the vertical stripes chart.fill_linear_stripes(Chart.CHART, 0, 'CCCCCC', 0.2, 'FFFFFF', 0.2) # Set the horizontal dotted lines chart.set_grid(0, 25, 5, 5) # The Y axis labels left_axis = ['0.25', '0.5', '0.75', '1'] left_axis[0] = '' chart.set_axis_labels(Axis.LEFT, left_axis) left_axis2 = "Proton Flux"[::-1] chart.set_axis_labels(Axis.LEFT, left_axis2) # X axis labels chart.set_axis_labels(Axis.BOTTOM, time_data[0:3][::-1]) chart.set_axis_labels(Axis.BOTTOM, "Time") chart.download('chart.png') return True
def __init__(self): # Set the vertical range from 0 to 100 factor = 8 - 1 max_y = 20 * factor max_x = 250 # Chart size of 200x125 pixels and specifying the range for the Y axis self.chart = SimpleLineChart(width=50*factor, height=25*factor, title='ping ftp.sunet.se', # legend=True, x_range=[0, max_x], y_range=[0, max_y]) # Set the line colour to blue self.chart.set_colours(colours=['0000FF']) # Set the vertical stripes:arguments area, angle etc. #self.chart.fill_linear_stripes(Chart.CHART, 0, 'CCCCCC', 0.2, 'FFFFFF', 0.2) # Set the horizontal dotted lines #self.chart.set_grid(x_step=0, y_step=5*factor, line_segment=factor, blank_segment=factor) # The Y axis labels contains 0 to 100 skipping every 25, but remove the # first number because it's obvious and gets in the way of the first X # label. left_axis = range(0, max_y + 1, 25) left_axis[0] = '' self.chart.set_axis_labels(axis_type=Axis.LEFT, values=left_axis) # X axis labels self.chart.set_axis_labels(axis_type=Axis.BOTTOM, \ # ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun']) values= [ ' ', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'])
def process (name, date): newdate = date[8:10] + "_" + date[5:7] + "_" + date[0:4] url = r"http://www.lloydsbankinggroup.com/media/excel/2010/%s_historic_data.xls" % newdate print url url = r"http://www.lloydsbankinggroup.com/media/excel/2010/04_06_10_historic_data.xls" book = xlrd.open_workbook(file_contents=scrape(url)) sheet = book.sheet_by_name (name) months=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'] data = [] i = 1 while i < 500: try: month = sheet.cell_value (i, 0) year = sheet.cell_value (i, 1) level = sheet.cell_value (i, 2) except: break when= "%04d-%02d-01" % (int(year), months.index (month) + 1) i = i + 1 data.append (level) sqlite.save(unique_keys=["Date"], data={"Date":when, "Index":level}) chart = SimpleLineChart(500, 255, y_range=[0, 700]) chart.add_data (data) metadata.save("chart", chart.get_url())
def _line_strip_graph(data, legends, axis_labels, size, steps, type=SimpleLineChart, multiline=False): if multiline: max_values = [] min_values = [] for row in data: max_values.append(max(row)) min_values.append(min(row)) max_y = max(max_values) min_y = min(min_values) else: max_y = max(data) min_y = min(data) #validando si hay datos para hacer grafico if max_y == 0: return None chart = SimpleLineChart(size[0], size[1], y_range=[0, max_y * 1.05]) if multiline: for row in data: chart.add_data(row) else: chart.add_data(data) step = ((max_y * 1.05) - (min_y * 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 try: left_axis = range(int(round(min_y * 0.95)), tope, int(step)) except ValueError: #error por que los range no soportan decimales left_axis = range(0, 2) left_axis[0] = '' chart.set_axis_labels(Axis.LEFT, left_axis) chart.set_colours( ['FFBC13', '22A410', 'E6EC23', '2B2133', 'BD0915', '3D43BD']) chart.set_axis_labels(Axis.BOTTOM, axis_labels) chart.set_legend(legends) chart.set_legend_position('b') return chart
def simple_random(): chart = SimpleLineChart(300, 100, y_range=(0, 100)) max_y = 100 list_data = [10, 90, 80, 10, 10, 20, 30, 20, 15, 45, 56, 42, 92] chart.add_data(list_data) chart.add_data(reversed(list_data)) chart.set_axis_labels(Axis.LEFT, ['', max_y / 2, max_y]) chart.set_axis_labels(Axis.BOTTOM, ['Sep', 'Oct', 'Nov', 'Dec']) chart.download('line-simple-random.png')
def get_chart_url(series): chart = SimpleLineChart(400, 200) chart.set_legend([name for (name, _) in series]) chart.set_colours_within_series(colors[0:len(series)]) for (_, data) in series: chart.add_data(data) return chart.get_url()
def graphURL(data): log("debut graphURL") log(str(data)) # Set the vertical range from 0 to 100 max_y = 100 * max(data) + 20 # Chart size of 300x150 pixels and specifying the range for the Y axis log(str(max_y)) try: chart = SimpleLineChart(300, 150, y_range=[0, max_y]) except Exception, e: log(str(e))
def simpleChart(bottom_labels, data): # round min and max to nearest integers datamin = int(min(data) - 0.5) datamax = int(max(data) + 0.5) chart = SimpleLineChart(200, 125, y_range=[datamin, datamax]) chart.add_data(data) left_axis = [datamin, 0, datamax] chart.set_axis_labels(Axis.LEFT, left_axis) chart.set_axis_labels(Axis.BOTTOM, bottom_labels) return chart
def many_labels(): chart = SimpleLineChart(settings.width, settings.height) for a in range(3): for axis_type in (Axis.LEFT, Axis.RIGHT, Axis.BOTTOM): index = chart.set_axis_range(axis_type, 0, random.random() * 100) chart.set_axis_style(index, colour=helper.random_colour(), \ font_size=random.random() * 10 + 5) chart.add_data(helper.random_data()) chart.download('label-many.png')
def group_post_activity(request, group_slug): group = get_object_or_404(BaseGroup, slug=group_slug) postcount = [] replycount = [] allcount = [] listdate = [] thedate = date(date.today().year - 1, date.today().month, 1) skip = False while thedate.year != date.today().year or thedate.month != date.today( ).month: if thedate.month == 12: enddate = date(year=thedate.year + 1, month=1, day=1) else: enddate = date(year=thedate.year, month=thedate.month + 1, day=1) posts = GroupTopic.objects.filter(parent_group=group, created__range=(thedate, enddate)).count() #replies = ThreadedComment.objects.filter(content_object__parent_group=group, # date_submitted__range=(thedate, enddate)).count() replies = 0 postcount.append(posts) replycount.append(replies) allcount.append(posts + replies) if not skip: listdate.append(thedate.strftime("%B %y")) else: listdate.append("") skip = not skip thedate = enddate postactivity = SimpleLineChart( 600, 450, y_range=(min(min(postcount), min(replycount)), max(max(postcount), max(replycount)) + 1)) postactivity.add_data(postcount) postactivity.add_data(replycount) postactivity.add_data(allcount) yaxis = range(min(min(postcount), min(replycount)), max(max(postcount), max(replycount)) + 1, 1) if len(yaxis) < 2: yaxis.append(1) yaxis[0] = '' postactivity.set_axis_labels(Axis.LEFT, yaxis) postactivity.set_axis_labels(Axis.BOTTOM, listdate) postactivity.set_colours(['ff0000', '0000ff', '00ff00']) postactivity.set_legend(['posts', 'replies', 'total']) postactivity.set_legend_position('b') return postactivity.get_url()
def _line(self, results): key = 'count' if self.request.GET.get('percentages') == 'true': key = 'percentage' counts = [x.get(key) for x in results] maxcount = max(counts) granularity = self.request.GET.get('granularity') times = [x.get(granularity) for x in results] width = int(self.request.GET.get('width', 575)) height = int(self.request.GET.get('height', 300)) chart = SimpleLineChart(width, height, y_range=(0, max(counts))) chart.add_data(counts) chart.set_line_style(0, thickness=2) # Set line thickness chart.set_colours([ 'E0B300', ]) chart.fill_solid('bg', '00000000') # Make the background transparent chart.set_grid(0, 50, 2, 5) # Set gridlines if self.request.GET.get('granularity') == 'month': months = [x['month'] for x in results] januaries = [x for x in months if x.endswith('01')] january_indexes = [months.index(x) for x in januaries] january_percentages = [ int((x / float(len(months))) * 100) for x in january_indexes ] index = chart.set_axis_labels(Axis.BOTTOM, [x[:4] for x in januaries[::2]]) chart.set_axis_positions(index, [x for x in january_percentages[::2]]) if key == 'percentage': label = '%.4f' % maxcount label += '%' else: label = int(maxcount) index = chart.set_axis_labels(Axis.LEFT, [ label, ]) chart.set_axis_positions(index, [ 100, ]) if self.request.GET.get('legend', 'true') != 'false': chart.set_legend([ self.request.GET.get('phrase'), ]) return chart.get_url()
def group_membership_activity(request, group_slug): group = get_object_or_404(BaseGroup, slug=group_slug) listcount = [] listdate = [] currentcount = group.member_users.all().count() thedate = date.today() skip = False while thedate.year != date.today().year - 1 or thedate.month != date.today( ).month: if thedate.month == 1: startdate = date(year=thedate.year - 1, month=12, day=1) else: startdate = date(year=thedate.year, month=thedate.month - 1, day=1) joins = GroupMemberRecord.objects.filter( group=group, membership_start=True, datetime__range=(startdate, thedate)).count() unsubs = GroupMemberRecord.objects.filter( group=group, membership_end=True, datetime__range=(startdate, thedate)).count() listcount.append(currentcount - joins + unsubs) if not skip: listdate.append(thedate.strftime("%B %y")) else: listdate.append("") skip = not skip thedate = startdate listcount.reverse() listdate.reverse() activity = SimpleLineChart(600, 450, y_range=(min(listcount), max(listcount))) activity.add_data(listcount) yaxis = range( min(listcount), max(listcount) + 1, max(max(listcount) / 10, 1)) # that last number should be 25 or 50. but for testing... if len(yaxis) < 2: # only for testing... yaxis.append(1) yaxis[0] = '' activity.set_axis_labels(Axis.LEFT, yaxis) activity.set_axis_labels(Axis.BOTTOM, listdate) return activity.get_url()
def mk_chart(self): from pygooglechart import SimpleLineChart chart = SimpleLineChart(self.width, self.height, colours=('91CF60', 'FC8D59')) all_labels = [d[0] for d in self.cumulative] chart.add_data([d[1] for d in self.cumulative]) chart.add_data([d[1] for d in self.newdata]) chart.set_axis_labels('y', range(0, self.cmax, (self.cmax / 4))) chart.set_axis_labels('x', [ all_labels[x] for x in range(0, len(all_labels), (len(all_labels) / 4)) ]) return chart
def simpleChart1(bottom_labels, data): # round min and max to nearest integers datamin = int(min(data) - 0.5) datamax = int(max(data) + 0.5) chart = SimpleLineChart(200, 125, y_range=[datamin, datamax]) chart.add_data(data) left_axis = [datamin, 0, datamax] chart.set_axis_labels(Axis.LEFT, left_axis) chart.set_axis_labels(Axis.BOTTOM, bottom_labels) chart.set_axis_labels(Axis.BOTTOM, ['X Axis']) # second label below first one chart.set_axis_positions( 2, [50.0]) # position, left is 0., right is 100., 50. is center return chart
def stripes(): # Set the vertical range from 0 to 100 max_y = 100 # Chart size of 200x125 pixels and specifying the range for the Y axis chart = SimpleLineChart(600, 500, y_range=[0, max_y]) # Add the chart data # data = [ # 32, 34, 34, 32, 34, 34, 32, 32, 32, 34, 34, 32, 29, 29, 34, 34, 34, 37, # 37, 39, 42, 47, 50, 54, 57, 60, 60, 60, 60, 60, 60, 60, 62, 62, 60, 55, # 55, 52, 47, 44, 44, 40, 40, 37, 34, 34, 32, 32, 32, 31, 32 # ] # data2 = [ # 55, 52, 47, 44, 44, 40, 40, 37, 34, 34, 32, 32, 32, 31, 32, 62, 60, 55, # 32, 34, 34, 32, 34, 34, 32, 32, 32, 34, 34, 32, 29, 29, 34, 34, 34, 37, # 37, 39, 42, 47, 50, 54, 57, 60, 60, 60, 60, 60, 60, 60, 62 # ] data = xrange(0, 100, 20) data2 = [0, 20, 20, 40, 40, 80, 80, 100, 100] chart.add_data(data) chart.add_data(data2) # Set the line colour to blue chart.set_colours(['0000FF', '00CC00']) # Set the vertical stripes chart.fill_linear_stripes(Chart.CHART, 0, 'CCCCCC', 0.2, 'FFFFFF', 0.2) # Set the horizontal dotted lines chart.set_grid(0, 25, 5, 5) # The Y axis labels contains 0 to 100 skipping every 25, but remove the # first number because it's obvious and gets in the way of the first X # label. left_axis = range(0, max_y + 1, 25) left_axis[0] = '' chart.set_axis_labels(Axis.LEFT, left_axis) # X axis labels chart.set_axis_labels(Axis.BOTTOM, \ ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun']) chart.download('line-stripes.png')
def linechart(name, dataset, size=(400,400)): max_y = maxy(dataset) chart = SimpleLineChart(size[0], size[1], y_range=[0, max_y]) legend = [] for series_name, s in dataset: chart.add_data([y for x, y in s]) legend.append(series_name) chart.set_colours(['057D9F', '8106A9', 'E9FB00', 'FF8100']) chart.set_legend(legend) chart.set_grid(0, 25, 5, 5) left_axis = range(0, int(max_y + 1), 25) left_axis[0] = '' chart.set_axis_labels(Axis.LEFT, left_axis) bottom_axis = [x for x, y in dataset[0][1]] chart.set_axis_labels(Axis.BOTTOM, bottom_axis) chart.download(name)
def __line_strip_graphic__(data, legends, axis_labels, size, steps, type=SimpleLineChart, multiline=False): if multiline: max_values = [] min_values = [] for row in data: max_values.append(max(row)) min_values.append(min(row)) max_y = max(max_values) min_y = min(min_values) else: max_y = max(data) min_y = min(data) chart = SimpleLineChart(size[0], size[1], y_range=[0, max_y * 1.05]) if multiline: for row in data: chart.add_data(row) else: chart.add_data(data) step = ((max_y * 1.05) - (min_y * 0.95)) / steps try: left_axis = range(int(min_y * 0.95), int(max_y * 1.05), int(step)) except ValueError: #error por que los range no soportan decimales left_axis = range(0, 2) left_axis[0] = '' chart.set_axis_labels(Axis.LEFT, left_axis) chart.set_colours( ['FFBC13', '22A410', 'E6EC23', '2B2133', 'BD0915', '3D43BD']) chart.set_axis_labels(Axis.BOTTOM, axis_labels) chart.set_legend(legends) chart.set_legend_position('b') return chart
def _plot_timeseries(self, options, args, fh): """Plot a timeseries graph""" from pygooglechart import Chart, SimpleLineChart, Axis delimiter = options.delimiter field = options.field - 1 datefield = options.datefield - 1 pts = [] for l in imap(lambda x: x.strip(), fh): splitted_line = l.split(delimiter) v = float(splitted_line[field]) t = datetime.strptime(splitted_line[datefield], options.dateformat) pts.append((t, v)) if options.get('limit', None): # Only wanna use top (earliest) N samples by key, sort and truncate pts = sorted(pts, key=itemgetter(0), reverse=True)[:options.limit] if not pts: raise ValueError("No data to plot") max_y = int(max((v for t, v in pts))) chart = SimpleLineChart(options.width, options.height, y_range=[0, max_y]) # Styling chart.set_colours(['0000FF']) chart.fill_linear_stripes(Chart.CHART, 0, 'CCCCCC', 0.2, 'FFFFFF', 0.2) chart.set_grid(0, 25, 5, 5) ts, vals = zip(*pts) chart.add_data(vals) # Axis labels chart.set_axis_labels(Axis.BOTTOM, ts) left_axis = range(0, max_y + 1, 25) left_axis[0] = '' chart.set_axis_labels(Axis.LEFT, left_axis) return chart
def get(self): counters = tasks.Counter.all().fetch(10) rows = [{'name': c.key().name(), 'count': c.count} for c in counters] chart = SimpleLineChart(1000, 300) for counter in counters: query = counter.snapshots query.order('-date') snapshots = query.fetch(30) counts = [s.count for s in snapshots] dates = [s.date.strftime("%d/%m") for s in snapshots] for i in xrange(len(counts) - 1): counts[i] -= counts[i + 1] counts.reverse() dates.reverse() chart.add_data(counts[1:]) chart.set_axis_labels(pygooglechart.Axis.BOTTOM, dates[1:]) chart.set_axis_labels(pygooglechart.Axis.LEFT, range(0, chart.data_y_range()[1], 5)) hsv_colours = [(float(x) / 255, 1, 1) for x in range(0, 255, 255 / len(counters))] rgb_colours = [colorsys.hsv_to_rgb(*x) for x in hsv_colours] hex_colours = [ '%02x%02x%02x' % (int(x[0] * 255), int(x[1] * 255), int(x[2] * 255)) for x in rgb_colours ] chart.set_colours(hex_colours) chart.set_legend([c.key().name() for c in counters]) path = os.path.join(os.path.dirname(__file__), self.TEMPLATE) self.response.out.write( template.render(path, { 'url': chart.get_url(), 'counters': rows }))
def users(*args): days = 60 from django.db import connection cursor = connection.cursor() cursor.execute( "SELECT date_joined, COUNT(*) from auth_user where date_joined > NOW() - INTERVAL %i DAY group by DATE(date_joined) order by DATE(date_joined) desc" % days) data = {} max_y = 0 for dt, num in cursor.fetchall(): if num > max_y: max_y = num data[dt.date()] = num data2 = [] dt = date.today() - timedelta(days - 1) for i in xrange(days): data2.append((dt, data.get(dt, 0))) dt = dt + timedelta(1) chart = SimpleLineChart(800, 125, y_range=[0, max_y]) chart.add_data([row[1] for row in data2]) chart.set_colours(['0000FF']) ticks = (max_y % 25) + 1 left_axis = range(0, max_y, 25) left_axis[0] = '' chart.set_axis_labels(Axis.RIGHT, left_axis) bottom_axis = [ dt[0].strftime("%b") if dt[0].day == 1 else '' for dt in data2 ] chart.set_axis_labels(Axis.BOTTOM, bottom_axis) chart.set_title("Daily Registrations") data2.reverse() return chart
def linegraph(self, days, bars, output, title=""): data = [] min_count = 0 max_count = 0 date = lambda i: datetime.date.today() + datetime.timedelta(-days + i) for i in range(0, days + 1): count = bars[date(i)] max_count = max(count, max_count) min_count = min(count, min_count) data.append(count) chart = SimpleLineChart(800, 350, y_range=[min_count, 60000]) chart.add_data(data) # Set the line colour to blue chart.set_colours(['0000FF']) # Set the vertical stripes d = max(1 / float(days), round(7 / float(days), 2)) chart.fill_linear_stripes(Chart.CHART, 0, 'CCCCCC', d, 'FFFFFF', d) fmt = "%d/%m" chart.set_axis_labels(Axis.BOTTOM, \ [date(i).strftime(fmt) for i in range(0,days,7)]) # Set the horizontal dotted lines chart.set_grid(0, 25, 5, 5) # The Y axis labels contains 0 to 100 skipping every 25, but remove the # first number because it's obvious and gets in the way of the first X # label. delta = float(max_count - min_count) / 100 skip = int(delta) / 5 * 100 left_axis = range(0, 60000 + 1, skip) left_axis[0] = '' chart.set_axis_labels(Axis.LEFT, left_axis) if len(title) > 0: chart.set_title(title % days) chart.download(output)
def history(message): try: splitted_text = re.search(r'[a-zA-Z]{3}/[a-zA-Z]{3}', message.text).group().split('/') base = splitted_text[0].upper() symbols = splitted_text[1].upper() start = str(date.today() - timedelta(days=7)) end = str(date.today()) data = requests.get( 'https://api.exchangeratesapi.io/history?start_at='+start+'&end_at='+end+'&base='+base+'&symbols='+symbols ) data = data.json() chart = SimpleLineChart(700, 400) chart_data = [] # using collections.OrderedDict to sort incoming data for i in collections.OrderedDict(sorted(data['rates'].items())): chart_data.append(round(data['rates'][i][symbols], 2)) chart.add_data(chart_data) print(collections.OrderedDict(sorted(data['rates'].items()))) # Set the line colour chart.set_colours(['0000FF']) left_axis= list( range( round(min(chart_data)), round(max(chart_data)+1), round(sum(chart_data)/len(chart_data)) ) ) chart.set_axis_labels(Axis.LEFT, left_axis) x_labels = [] # using collections.OrderedDict to sort incoming data for i in collections.OrderedDict(sorted(data['rates'].items())): x_labels.append(i) chart.set_axis_labels(Axis.BOTTOM, x_labels) print(chart.get_url()) bot.send_photo(message.chat.id, chart.get_url()) except: bot.send_message(message.chat.id, 'No exchange rate data is available for the selected currency.')
def cat_proximity(): """Cat proximity graph from http://xkcd.com/231/""" chart = SimpleLineChart(int(settings.width * 1.5), settings.height) chart.set_legend(['INTELLIGENCE', 'INSANITY OF STATEMENTS']) # intelligence data_index = chart.add_data([100. / y for y in xrange(1, 15)]) # insanity of statements chart.add_data([100. - 100 / y for y in xrange(1, 15)]) # line colours chart.set_colours(['208020', '202080']) # "Near" and "Far" labels, they are placed automatically at either ends. near_far_axis_index = chart.set_axis_labels(Axis.BOTTOM, ['FAR', 'NEAR']) # "Human Proximity to cat" label. Aligned to the center. index = chart.set_axis_labels(Axis.BOTTOM, ['HUMAN PROXIMITY TO CAT']) chart.set_axis_style(index, '202020', font_size=10, alignment=0) chart.set_axis_positions(index, [50]) chart.download('label-cat-proximity.png')
def draw_plot(data, generation): # Set the vertical range from 0 to 100 max_y = data[0] # Chart size of 200x125 pixels and specifying the range for the Y axis chart = SimpleLineChart(600, 325, y_range=[0, max_y]) # Add the chart data """ data = [ 32, 34, 34, 32, 34, 34, 32, 32, 32, 34, 34, 32, 29, 29, 34, 34, 34, 37, 37, 39, 42, 47, 50, 54, 57, 60, 60, 60, 60, 60, 60, 60, 62, 62, 60, 55, 55, 52, 47, 44, 44, 40, 40, 37, 0,0,0,0,0,0,0 ] """ chart.add_data(data) # Set the line colour to blue chart.set_colours(['0000FF']) # Set the vertical stripes chart.fill_linear_stripes(Chart.CHART, 0, 'CCCCCC', 0.2, 'FFFFFF', 0.2) # Set the horizontal dotted lines chart.set_grid(0, 25, 5, 5) # The Y axis labels contains 0 to 100 skipping every 25, but remove the # first number because it's obvious and gets in the way of the first X # label. left_axis = range(0, max_y + 1, 25) left_axis[0] = '' chart.set_axis_labels(Axis.LEFT, left_axis) # X axis labels chart.set_axis_labels(Axis.BOTTOM, [str(x) for x in xrange(1, generation + 1)][::14]) chart.download('plot.png')
def fill(): # Set the vertical range from 0 to 50 max_y = 50 chart = SimpleLineChart(200, 125, y_range=[0, max_y]) # First value is the highest Y value. Two of them are needed to be # plottable. #chart.add_data([max_y] * 2) # 3 sets of real data chart.add_data([0, 28, None,None]) chart.add_data([None, 28, 18,None]) chart.add_data([None, None, 18,30]) # Last value is the lowest in the Y axis. #chart.add_data([0] * 2) # Black lines chart.set_colours(["ffc900","d60000","8fb800","d60000","8fb800"]) # Filled colours # from the top to the first real data #chart.add_fill_range('76A4FB', 0, 1) # Between the 3 data values #chart.add_fill_range('224499', 1, 2) #chart.add_fill_range('FF0000', 2, 3) # from the last real data to the #chart.add_fill_range('80C65A', 3, 4) # Some axis data chart.set_axis_labels(Axis.LEFT, ['', max_y / 2, max_y]) chart.set_axis_labels(Axis.BOTTOM, ['Sep', 'Oct', 'Nov', 'Dec']) chart.download('line-fill.png')