Exemplo n.º 1
0
def animalNum(stats):

    chart = XYLineChart(400, 300)

    max_wx = 0
    for creature in ['rabbit', 'wolf']:
        WX = []
        WY = []
        count = 0
        for t in sorted(stats[creature].keys()):
            WX.append(t)
            for event in stats[creature][t]['event']:
                if event == LiveLog.BIRTH:
                    count += 1
                else:
                    count -= 1
          #  print count, creature, str(stats[creature][t]['event'])
            WY.append(count)

        chart.add_data(WX)
        chart.add_data(WY)
        max_wx = max(max_wx, max(WX))

    chart.set_title("Population size")
    chart.set_colours(['ff0000', '0000ff'])
    chart.set_legend(['rabbits', 'wolves'])
    chart.set_grid(0, 10, 3, 3)

    chart.set_axis_labels(Axis.BOTTOM, range(0, max_wx + 1, 100))
    chart.download('number.png')
Exemplo n.º 2
0
def make_chart(request):
    chart = XYLineChart(640, 400)
    chart.set_colours(['FF0000', '00FF00', '0000FF'])

    # add a few attributes to build the legend incrementally
    chart.devices = []
    chart._ranges = []

    return chart
class Graph():
    
    colours = []
    legend = []
    max_wx = 0
    max_wy = 0
    min_wy = 4000000000
    
    label_suffix = " MB"
    scale = 1024*1024

    def __init__(self):
        self.chart = XYLineChart(750, 400)
        
    
    def set_config(self, config):
        self.label_suffix = config.get("general", "label_suffix")
        self.scale = int(config.get("general", "scale"))

    def add_serie(self, WX, WY, colour, descr):
        self.chart.add_data(WX)
        self.chart.add_data(WY)
        self.colours.append(colour)
        self.legend.append(descr)
        
        self.max_wx = max(self.max_wx, max(WX))
        self.max_wy = max(self.max_wy, max(WY))
        self.min_wy = min(self.min_wy, min(WY))
        
    def set_title(self, title):
        self.chart.set_title(title)
        
    def make_chart(self, name):
        densX = self.max_wx / 15
        
        wy_max_lab = int(self.max_wy / self.scale + 1)
        wy_min_lab = int(max(self.min_wy / self.scale - 1, 0))
        densY = max((wy_max_lab - wy_min_lab) / 10, 1) 
        self.chart.set_axis_labels(Axis.BOTTOM, range(0, self.max_wx + 1, densX))
        self.chart.set_axis_labels(Axis.LEFT, self.__make_Ylabels(wy_min_lab, wy_max_lab, int(densY)))
        self.chart.y_range = (wy_min_lab * self.scale, wy_max_lab * self.scale)
        
        self.chart.set_legend(self.legend)
        self.chart.set_colours(self.colours)
        self.chart.set_grid(15, 10, 1, 5)
        
        self.chart.download("%s.png" % (name))
        
    def __make_Ylabels(self, wy_min_lab, wy_max_lab, densY):
        result = []
        for i in range(wy_min_lab, wy_max_lab, densY):
            result.append("%d%s" % (i, self.label_suffix))
        return result
Exemplo n.º 4
0
def graph_evolution(gens, best_per_gen):

    chart = XYLineChart(500, 500, x_range=(0, max(gens)), y_range=(0, max(best_per_gen)))

    chart.add_data(gens)
    chart.add_data(best_per_gen)

    chart.set_colours(['0000FF'])

    # x axis labels are generation numbers
    chart.set_axis_labels(Axis.BOTTOM, gens)

    webbrowser.open(chart.get_url())
Exemplo n.º 5
0
def make_graph(x_axis, data, color_vertically=True):
    x_axis = x_axis[:]
    data = data[:]

    max_y_value = 24500000
    max_y = 24500000
    min_time = min(x_axis)
    max_time = max(x_axis)

    chart = XYLineChart(700,
                        400,
                        x_range=[min_time, max_time],
                        y_range=[0, max_y_value])

    chart.set_axis_labels(Axis.LEFT, ['', max_y_value])

    start_time = datetime.fromtimestamp(min(x_axis)).strftime("%H:%M")
    end_time = datetime.fromtimestamp(max(x_axis)).strftime("%H:%M")
    chart.set_axis_labels(Axis.BOTTOM, [start_time, end_time])

    # First value is the highest Y value. Two of them are needed to be
    # plottable.
    chart.add_data([min_time, max_time])
    chart.add_data([max_y] * 2)

    #print max_y, min_time, max_time
    prev_y = [0] * 2
    for bar in data[::-1]:
        Y = bar
        if not Y:
            Y = prev_y
        #print "X", idx, X
        #print "Y", idx, Y
        chart.add_data(x_axis)
        chart.add_data(Y)
        prev_y = Y

    chart.add_data([min_time, max_time])
    chart.add_data([0] * 2)

    # Black lines
    chart.set_colours(['000000'] * 5)

    color_chart_vertically(chart, data)

    print chart.get_url()
    return chart
Exemplo n.º 6
0
def make_graph(x_axis, data, color_vertically=True):
	x_axis = x_axis[:]
	data = data[:]

	max_y_value = 24500000
	max_y = 24500000
	min_time = min(x_axis)
	max_time = max(x_axis)

	chart = XYLineChart(700, 400, x_range=[min_time, max_time], y_range=[0, max_y_value])

	chart.set_axis_labels(Axis.LEFT, ['', max_y_value])

	start_time = datetime.fromtimestamp(min(x_axis)).strftime("%H:%M")
	end_time = datetime.fromtimestamp(max(x_axis)).strftime("%H:%M")
	chart.set_axis_labels(Axis.BOTTOM, [start_time, end_time])

	# First value is the highest Y value. Two of them are needed to be
	# plottable.
	chart.add_data([min_time, max_time])
	chart.add_data([max_y] * 2)

	#print max_y, min_time, max_time
	prev_y = [0] * 2
	for bar in data[::-1]:
		Y = bar
		if not Y:
			Y = prev_y
		#print "X", idx, X
		#print "Y", idx, Y
		chart.add_data(x_axis)
		chart.add_data(Y)
		prev_y = Y

	chart.add_data([min_time, max_time])
	chart.add_data([0] * 2)

	# Black lines
	chart.set_colours(['000000'] * 5)

	color_chart_vertically(chart, data)

	print chart.get_url()
	return chart
Exemplo n.º 7
0
def genChart(width, height, data, ind, outfile, title):
    # this is designed to take a list, the value of the wshed, and save the output graph
    mn = min(data)
    mx = max(data)
    chart = XYLineChart(width, height, title=title, x_range=(0, len(data)), y_range=(0, mx))
    chart.set_colours(["3072F3", "FF0000"])
    chart.set_line_style(0, 3)
    chart.set_grid(20, 25, 1, 5)
    # set up axis and labels
    left_axis = chart.set_axis_labels(Axis.LEFT, ["            Lowest", "Total Toxicity    ", "            Highest"])
    chart.set_axis_style(left_axis, "202020", font_size=11, alignment=0)
    # add x and y data for distribution line
    chart.add_data(range(len(data)))
    chart.add_data(data)

    # add marker to position of ind
    chart.add_marker(0, ind, "d", "FF0000", 10)

    chart.download(outfile)
    return outfile
Exemplo n.º 8
0
chart.add_data(x_values)
row = []
total = 0
for d, count in rows:
    total += count
    row.append(total)
chart.add_data(row)

chart.add_data(x_values)
chart.add_data([x[1] for x in rows])

chart.add_data(x_values)
chart.add_data([0] * len(x_values))

chart.set_colours(['000000', 'ff0000', '000000'])
chart.add_fill_range('99ccff', 0, 2)

axis = range(0, 420, 420 / 6)
axis[-1] = 420
chart.set_axis_labels(Axis.LEFT, map(str, axis))

axis = [datetime.combine(start, time())]
step = (end - start) / 15
end = datetime.combine(end, time())
while axis[-1] < end:
    axis.append(axis[-1] + step)
axis[-1] = end

for ix, d in enumerate(axis):
    axis[ix] = d.strftime('%d %b')
Exemplo n.º 9
0
def _make_chart(width=600, height=200, **chart_kwargs):
    chart = XYLineChart(width, height, **chart_kwargs)
    chart.set_colours(CHART_COLORS)
    return chart
Exemplo n.º 10
0
 def __init__(self,data,imagefileurl,name,label,title,nbpts=None,ptindexlist=None,timerange=False,timestart=None,type='ggl',labelx='',labely=None,unitx='',unity=''):
     Log('MyXYChart: begin %s\n' % label)
     self.charttype='line'
     self.imagefileurl = imagefileurl
     self.name = name
     self.label = label
     self.title = title
     self.type = type
     # Simple chart or XY chart ?
     if len(data)==2 and len(data[0])>1:
         datax = data[0]
         datay = data[1]
     else:
         #print('DEBUG: simple chart')
         datay = data
     # Compute min and max Y values
     (min_y,max_y,scaling_y) = ExtendRange(min(datay),max(datay))
     if max_y-min_y==0:
         max_y = min_y + 1.0
         scaling_y = 0.2
     
     if type in ('dyg','json'):
         self.marginsize = 0
         self.pt2px = None
         self.data = list(data)
         self.timerange = timerange
         self.labelx = labelx
         self.unitx = unitx
         self.unity = unity
         if labely==None:
             self.labely = label
         else:
             self.labely = labely
         if timerange:
             self.data[0] = map(lambda secf: 1000*time.mktime((timestart + datetime.timedelta(seconds=int(secf))).timetuple()),data[0])
             #self.data[0] = map(int,data[0])
         return
     
     #print('min_y=%d max_y=%d scaling_y=%d' % (min_y,max_y,scaling_y))
     #max_y = int(ceil(max(datay))) # up rounded max value
     #if min(datay)<0.0:
     #    min_y = int(floor(min(datay)))
     #else:
     #    min_y = 0
     #print('min_y=%d,max_y=%d %f' % (min_y,max_y,max(datay)))
     #self.marginsize = max(len(str(max_y)),len(str(min_y)))*6+6  # Font size of y label is 6 pixels
     #self.marginsize = 30
     self.marginsize = max(max(len(str(max_y)),len(str(min_y)))*7+10,30)  # Font size of y label is 6 pixels
     self.height = 200
     # Build chart
     if len(data)==2 and len(data[0])>1:
         self.width = 800
         (min_x,max_x,scaling_x) = ExtendRange(datax[0],datax[len(datax)-1])
         #print('min_x=%d max_x=%d' % (min_x,max_x))
         min_x = int(floor(datax[0]))
         max_x = int(ceil(datax[len(datax)-1]))
         #print('min_x=%d max_x=%d' % (min_x,max_x))
         chart = XYLineChart(self.width, self.height, x_range=[min_x,max_x], y_range=[min_y,max_y])
         chart.add_data(datax)
         chart.add_data(datay)
         if min_y<0 and max_y>0:
             chart.add_data([0,max_x])
             chart.add_data([0,0])
             chart.set_colours(['339900','FF0000'])
             chart.grid = '%s,%s,%s,%s,%s,%s' % (float(scaling_x*100)/float(max_x-min_x),float(scaling_y*100)/float(max_y-min_y),2,2,float(min_x*100)/float(max_x-min_x),0.0)
         else:
             chart.set_colours(['339900'])
             try:
                 chart.grid = '%s,%s,%s,%s,%s,%s' % (float(scaling_x*100)/float(max_x-min_x),float(scaling_y*100)/float(max_y-min_y),2,2,float(min_x*100)/float(max_x-min_x),float(min_y*100)/float(max_y-min_y))
             except ZeroDivisionError:
                 print 'DEBUG: %s %s %s %s' % (max_x,min_x,max_y,min_y)
         #print('grid=%s' % chart.grid)
         #chart.set_grid ...
         if timerange:
             axis_index = chart.set_axis_labels(Axis.BOTTOM, map(lambda sec: SecondToTimeString(timestart,sec),MyRange(min_x,max_x,scaling_x)))
             chart.set_axis_positions(axis_index, map(lambda x: '%.4f' % (float(x*100)/float(max_x-min_x)),MyRange(min_x,max_x,scaling_x)))  #.4f to no have too long urls
             #for x in MyRange(scaling_x,max_x,scaling_x):
             #    chart.add_marker(0,GetIndexOfClosest(datax,x),'V','AAAAAA',1,-1)
         else:
             axis_index = chart.set_axis_labels(Axis.BOTTOM, MyRange(min_x,max_x,scaling_x))
             chart.set_axis_positions(axis_index, map(lambda x: '%.4f' % (float(x*100)/float(max_x-min_x)),MyRange(min_x,max_x,scaling_x)))  #.4f to no have too long urls
             #for x in MyRange(scaling_x,max_x,scaling_x):
             #    chart.add_marker(0,GetIndexOfClosest(datax,x),'V','AAAAAA',1,-1)
         chart.set_axis_labels(Axis.LEFT, MyRange(min_y,max_y,scaling_y))
         marginright = 30
         graphsize = self.width-self.marginsize-marginright
         #print([GetIndexOfCloserFromOrderedList(i,ptindexlist) for i in range(0,nbpts)])
         if ptindexlist==None:
             #if nbpts==None:
             #    nbpts=len(datax)
             if not(nbpts==len(datax)):
                 raise Exception('nbpts=%s len(datax)=%s'%(nbpts,len(datax)))
             self.pt2px = [int(round(datax[i]*graphsize/(max(datax)-min(datax)))) for i in range(0,nbpts)]
         else:
             dataxrange = max(datax)-min(datax)
             maxj = len(ptindexlist)-1
             self.pt2px = []
             j = 0
             for i in range(0,nbpts):
                 if j<maxj and ptindexlist[j+1]<=i:
                     j += 1
                 self.pt2px.append(int(round(datax[j]*graphsize/dataxrange)))
             #self.pt2px = [int(round(datax[GetIndexOfClosestFromOrderedList(i,ptindexlist)]*graphsize/(max(datax)-min(datax)))) for i in range(0,nbpts)]
         # the following works only if points are equally
         #self.pt2px = [int(round(datax[min(int(round(i*len(datax)/nbpts)),len(datax)-1)]*graphsize/(max(datax)-min(datax)))) for i in range(0,nbpts)]
     else:
         self.pt2px = None
         self.width = len(datay) + self.marginsize
         chart = SimpleLineChart(self.width, self.height, y_range=[min_y,max_y])
         chart.add_data(data)
         chart.set_colours(['0000FF'])
         #print('here %d %d'%(min_y,max_y))
         #sys.exit()
         chart.set_axis_labels(Axis.LEFT, MyRange(min_y,max_y,scaling_y))
         marginright = 0
     chart.markers.append(('B','FFEE0080','0','1.0','0'))
     #chart.add_fill_simple('FFCC00')
     # Set the vertical stripes
     #chart.fill_linear_stripes(Chart.CHART, 0, 'CCCCCC', 0.2, 'FFFFFF', 0.2)
     # Set label
     #chart.set_title(label)
     # Build googlecharts url
     #print '&chma='+str(self.marginsize-2)+','+str(marginright)+',0,0'
     self.imagefileurl = chart.get_url() + '&chma='+str(self.marginsize-2)+','+str(marginright)+',0,0'
     if len(self.imagefileurl)>2069:
         raise ValueError('Too much values (%d) instead of 2069' % (len(self.imagefileurl)))
     Log('MyXYChart: end\n')
Exemplo n.º 11
0
def presence_chart(days):
  """Returns a graph of user presence, in his language of choice."""

  start = datetime.date.today() - datetime.timedelta(days=days)
  start = datetime.date(start.year, start.month, 1)

  genreh = Rehearsal.objects.filter(type='G').filter(date__gte=start).order_by('date')
  begreh = Rehearsal.objects.filter(type='B').filter(date__gte=start).order_by('date')
  concert = Concert.objects.filter(start__gte=start).order_by('start')

  # Calculates the vertical range
  max_y = 0
  genreh_presence = [] 
  active = []
  begreh_presence = []
  concert_presence = []
  for k in genreh: 
    active.append(((k.date-start).days, k.members.count()))
    if k.members.count() > max_y: max_y = k.members.count()
    genreh_presence.append(((k.date-start).days, k.presence().count()))
  for k in begreh: 
    begreh_presence.append(((k.date-start).days, k.presence().count()))
  for k in concert: 
    concert_presence.append(((k.start.date()-start).days, k.participated().count()))
    if k.participated().count() > max_y: max_y = k.participated().count()
  max_y = 5+5*(max_y/5)

  # Chart size of 200x125 pixels and specifying the range for the Y axis
  width = 500
  height = 200
  chart = XYLineChart(width, height, y_range=[0, max_y])
  chart.add_data([k[0] for k in genreh_presence])
  chart.add_data([k[1] for k in genreh_presence])
  chart.add_data([k[0] for k in begreh_presence])
  chart.add_data([k[1] for k in begreh_presence])
  chart.add_data([k[0] for k in concert_presence])
  chart.add_data([k[1] for k in concert_presence])
  chart.add_data([k[0] for k in active])
  chart.add_data([k[1] for k in active])

  # Set the line colours
  chart.set_colours(['0000FF', 'FF0000', '00FF00','000000'])
  chart.set_legend([_(u'General rehearsals'),_(u'Beginner rehearsals'),_(u'Concerts'),_(u'Active members')])
  chart.set_title(_(u'Member presence'))

  # Contents of each axis
  x_labels = range(0, max_y + 1, 5)
  x_labels[0] = ''
  chart.set_axis_labels(Axis.LEFT, x_labels)

  # Calculates the months
  months = [start.month + k for k in range(int(math.ceil(days/30)))]
  while max(months) > 12:
    for k in range(len(months)): 
      if months[k] > 12: months[k] -= 12 
  labels = [k.strftime('%b') for k in [datetime.date(1970, j, 1) for j in months]] + [''] 
  chart.set_axis_labels(Axis.BOTTOM, labels)

  # Set the horizontal dotted lines
  chart.set_grid(0, 20, 1, 5)

  chart.fill_linear_stripes(Chart.CHART, 0, 'CCCCCC', 1.0/(len(labels)-1), 'FFFFFF', 1.0/(len(labels)-1))

  return {'url': chart.get_url(), 'width': width, 'height': height} 
Exemplo n.º 12
0
def main():

    parseLive()

    stats = {}
    time_stats = {}

    fp = open("genetics.log", "r")
    lines = fp.readlines()
    header = [h.strip() for h in lines[0].split(",")]
    for line in lines[1:]:
        data = line.split(",")
        type = data[0].strip()
        generation = int(data[1])
        time = int(float(data[2]) / 10) * 10

        if type not in stats:
            stats[type] = {}
            time_stats[type] = {}
        if generation not in stats[type]:
            stats[type][generation] = {}
        if time not in time_stats[type]:
            time_stats[type][time] = {}

        d = stats[type][generation]
        t = time_stats[type][time]

        for phene, value in zip(header[3:], data[3:]):
            if phene not in d:
                d[phene] = []
            d[phene].append(float(value))
            if phene not in t:
                t[phene] = []
            t[phene].append(float(value))

    for s, name in [(stats, "generation"), (time_stats, "time")]:

        for feature in Phenotype.VALID:

            chart = XYLineChart(400, 300)

            max_wx = 0
            for creature in ['rabbit', 'wolf']:
                WX = []
                WYavg = []
                WYmin = []
                WYmax = []
                for g, phenes in sorted(s[creature].items()):
                    WX.append(g)
                    WYavg.append(sum(phenes[feature]) / len(phenes[feature]))
                    WYmin.append(min(phenes[feature]))
                    WYmax.append(max(phenes[feature]))

                if len(WX) < 2:
                    WX.append(2)

                chart.add_data(WX)
                chart.add_data(WYmin)
                chart.add_data(WX)
                chart.add_data(WYmax)
                chart.add_data(WX)
                chart.add_data(WYavg)



                max_wx = max(max_wx, max(WX))

            chart.set_title("Phenotype: %s / %s" % (feature, name))
            chart.set_colours(['ffe9bf', 'daffbf', 'ff0000', 'ebbfff', 'bffff5', '0000ff'])
            chart.set_legend(['rabbits-min', 'rabbits-max', 'rabbits-avg', 'wolves-min', 'wolves-max', 'wolves-avg'])
            chart.set_grid(0, 10, 3, 3)

            if name == "generation":
                chart.set_axis_labels(Axis.BOTTOM, range(0, max_wx + 1, 5))
            else:
                chart.set_axis_labels(Axis.BOTTOM, range(0, max_wx + 1, 100))
            chart.download("%s-%s.png" % (name, feature))
chart.add_data(x_values)
row = []
total = 0
for d, count in rows:
    total += count
    row.append(total)
chart.add_data(row)

chart.add_data(x_values)
chart.add_data([ x[1] for x in rows ])

chart.add_data(x_values)
chart.add_data([ 0 ] * len(x_values))

chart.set_colours(['000000', 'ff0000', '000000'])
chart.add_fill_range('99ccff', 0, 2)

axis = range(0, 420, 420 / 6)
axis[-1] = 420
chart.set_axis_labels(Axis.LEFT, map(str, axis))


axis = [ datetime.combine(start, time()) ]
step = (end - start) / 15
end = datetime.combine(end, time())
while axis[-1] < end:
    axis.append(axis[-1] + step)
axis[-1] = end

for ix, d in enumerate(axis):