Remove some debug.
Refactorize the rating range.
Correct the ploting function.
--- a/imms.py Sun Dec 07 16:05:33 2008 -0500
+++ b/imms.py Sun Dec 07 16:45:52 2008 -0500
@@ -5,19 +5,25 @@
_log = stderr
+MIN_RATING=0
+MAX_RATING=100
+
def rating_to_color(rating):
- i = rating
red = green = blue = 0
- if i <= 25:
+ division_size = (MAX_RATING-MIN_RATING)/4
+ divisions = range(MIN_RATING, MAX_RATING+1, division_size)
+ if rating <= divisions[1]:
red = 255
- green = i * 255 / 25
- elif i <= 75:
- red = (75-i) * 255 / 50
+ green = (rating-divisions[0]) * 255 / division_size
+ elif rating <= divisions[2]:
+ red = (divisions[2]-rating) * 255 / division_size
green = 255
+ elif rating <= divisions[3]:
+ green = 255
+ blue = (rating-divisions[2]) * 255 / division_size
else:
- green = 255
- blue = (i-75) * 255 / 25
- print >>stderr,"Rating:",rating,"R:",red,"G:",green,"B:",blue
+ green = (divisions[4]-rating) * 255 / division_size
+ blue = 255
return "#%02x%02x%02x" % (red, green, blue)
class IMMSDb:
--- a/immsview Sun Dec 07 16:05:33 2008 -0500
+++ b/immsview Sun Dec 07 16:45:52 2008 -0500
@@ -321,16 +321,15 @@
self.db = db;
Gnuplot.Gnuplot.__init__(self)
def plot_rate(self):
- array = [0] * (100+1)
+ rating_range = range(imms.MIN_RATING,imms.MAX_RATING+1)
+ array = [0] * rating_range.len()
for uid, rating in self.db.get_ratings():
- if (rating > 100):
- print >>stderr, "Rating for",uid,"is greater than 100:",rating
- rating = 100
+ if rating < imms.MIN_RATING or rating > imms.MAX_RATING:
+ print >>stderr, "Rating for",uid,"is out of range:", rating
+ rating = max(imms.MIN_RATING, min(imms.MAX_RATING, rating))
array[rating] += 1
- d1 = Gnuplot.Data(range(0,100), array,
- with_='impulses')
- d2 = Gnuplot.Data(range(0,100), array,
- smooth = 'bezier')
+ d1 = Gnuplot.Data(rating_range, array, with_='impulses')
+ d2 = Gnuplot.Data(rating_range, array, smooth = 'bezier')
self.plot(d1, d2, title='rate frequency')
self.gnuplot.flush()