From 43f8623d781de8fdc0653857757b79651e6369e7 Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Sat, 26 Mar 2011 12:01:43 +0900 Subject: [PATCH] tweak graph layout and separate cumul graph into young/mature --- anki/graphs.py | 101 +++++++++++++++++++++++++------------------------ 1 file changed, 51 insertions(+), 50 deletions(-) diff --git a/anki/graphs.py b/anki/graphs.py index 555f02954..94605f5b1 100644 --- a/anki/graphs.py +++ b/anki/graphs.py @@ -6,21 +6,15 @@ import os, sys, time, datetime, simplejson from anki.lang import _ import anki.js -#colours for graphs -dueYoungC = "#ffb380" -dueMatureC = "#ff5555" -dueCumulC = "#ff8080" -reviewNewC = "#80ccff" -reviewYoungC = "#3377ff" -reviewMatureC = "#0000ff" -lrnTimeC = "#0fcaff" -revTimeC = "#ffcaff" +colYoung = "#7c7" +colMature = "#070" +colLearn = "#007" +colRelearn = "#700" +colCram = "#ff0" +colIvl = "#077" easesNewC = "#80b3ff" easesYoungC = "#5555ff" easesMatureC = "#0f5aff" -addedC = "#b3ff80" -firstC = "#b380ff" -intervC = "#80e5ff" class Graphs(object): @@ -31,12 +25,12 @@ class Graphs(object): def report(self): txt = (self.dueGraph() + + self.cumDueGraph() + self.repsGraph() + self.timeGraph() + - self.cumDueGraph() + self.ivlGraph() + self.easeGraph()) - return "%s" % (anki.js.all, txt) + return "
%s
" % (anki.js.all, txt) # Due and cumulative due ###################################################################### @@ -49,22 +43,27 @@ class Graphs(object): for day in d: yng.append((day[0], day[1])) mtr.append((day[0], day[2])) - txt = self._graph(id="due", data=[ - dict(data=yng, color=dueYoungC, label=_("Young")), - dict(data=mtr, color=dueMatureC, label=_("Mature")) + txt = self._graph(id="due", title=_("Due Forecast"), data=[ + dict(data=mtr, color=colMature, label=_("Mature")), + dict(data=yng, color=colYoung, label=_("Young")) ]) return txt def cumDueGraph(self): self._calcStats() d = self._stats['due'] - tot = 0 - days = [] + toty = 0 + totm = 0 + ydays = [] + mdays = [] for day in d: - tot += day[1]+day[2] - days.append((day[0], tot)) - txt = self._graph(id="cum", data=[ - dict(data=days, color=dueCumulC, label=_("Cards")), + toty += day[1] + totm += day[2] + ydays.append((day[0], toty)) + mdays.append((day[0], totm)) + txt = self._graph(id="cum", title=_("Cumulative Due"), data=[ + dict(data=mdays, color=colMature, label=_("Mature")), + dict(data=ydays, color=colYoung, label=_("Young")), ], type="fill") return txt @@ -94,12 +93,12 @@ group by due order by due""" % self._limit(), mtr.append((row[0], row[3])) lapse.append((row[0], row[4])) cram.append((row[0], row[5])) - txt = self._graph(id="reps", data=[ - dict(data=lrn, color=reviewNewC, label=_("Learning")), - dict(data=lapse, color=reviewMatureC, label=_("Relearning")), - dict(data=yng, color=reviewYoungC, label=_("Young")), - dict(data=mtr, color=reviewMatureC, label=_("Mature")), - dict(data=cram, color=reviewMatureC, label=_("Cramming")), + txt = self._graph(id="reps", title=_("Repetitions"), data=[ + dict(data=mtr, color=colMature, label=_("Mature")), + dict(data=yng, color=colYoung, label=_("Young")), + dict(data=lapse, color=colRelearn, label=_("Relearning")), + dict(data=lrn, color=colLearn, label=_("Learning")), + dict(data=cram, color=colCram, label=_("Cramming")), ]) return txt @@ -116,12 +115,12 @@ group by due order by due""" % self._limit(), mtr.append((row[0], row[8])) lapse.append((row[0], row[9])) cram.append((row[0], row[10])) - txt = self._graph(id="time", data=[ - dict(data=lrn, color=lrnTimeC, label=_("Learning")), - dict(data=lapse, color=revTimeC, label=_("Relearning")), - dict(data=yng, color=revTimeC, label=_("Young")), - dict(data=mtr, color=revTimeC, label=_("Mature")), - dict(data=cram, color=revTimeC, label=_("Cramming")), + txt = self._graph(id="time", title=_("Time Spent"), data=[ + dict(data=mtr, color=colMature, label=_("Mature")), + dict(data=yng, color=colYoung, label=_("Young")), + dict(data=lapse, color=colRelearn, label=_("Relearning")), + dict(data=lrn, color=colLearn, label=_("Learning")), + dict(data=cram, color=colCram, label=_("Cramming")), ]) return txt @@ -148,16 +147,16 @@ from revlog group by day order by day""", cut=self.deck.sched.dayCutoff) def _ivls(self): return self.deck.db.all(""" -select ivl / 7, count() from cards +select ivl / 7 as grp, count() from cards where queue = 2 %s -group by ivl / 7 -order by ivl / 7""" % self._limit()) +group by grp +order by grp""" % self._limit()) def ivlGraph(self): self._calcStats() ivls = self._stats['ivls'] - txt = self._graph(id="ivl", data=[ - dict(data=ivls, color=intervC) + txt = self._graph(id="ivl", title=_("Intervals"), data=[ + dict(data=ivls, color=colIvl) ]) return txt @@ -192,7 +191,7 @@ order by thetype, ease""") ticks = [[1,1],[2,2],[3,3], [6,1],[7,2],[8,3],[9,4], [11, 1],[12,2],[13,3],[14,4]] - txt = self._graph(id="ease", data=[ + txt = self._graph(id="ease", title=_("Eases"), data=[ dict(data=d['lrn'], color=easesNewC, label=_("Learning")), dict(data=d['yng'], color=easesYoungC, label=_("Young")), dict(data=d['mtr'], color=easesMatureC, label=_("Mature")), @@ -212,25 +211,27 @@ order by thetype, ease""") self._stats['done'] = self._done() self._stats['eases'] = self._eases() - def _graph(self, id, data, conf={}, width=600, height=200, type="bars"): - conf['legend']= {'container': "#%sLegend" % id} + def _graph(self, id, title, data, conf={}, width=600, height=200, type="bars"): + # display settings + conf['legend'] = {'container': "#%sLegend" % id} + conf['series'] = dict(stack=True) if type == "bars": - conf['series'] = dict( - bars=dict(show=True, barWidth=0.8, align="center")) + conf['series']['bars'] = dict( + show=True, barWidth=0.8, align="center", fill=0.7, lineWidth=0) elif type == "fill": - conf['series'] = dict( - lines=dict(show=True, fill=True)) + conf['series']['lines'] = dict(show=True, fill=True) return ( """ - +

%(title)s

+
-

+
""" % dict( - id=id, w=width, h=height, + id=id, title=title, w=width, h=height, tw=width+100, data=simplejson.dumps(data), conf=simplejson.dumps(conf)))