blob: 74a75f374fb860cb73c831c08f46b42ec663508c [file] [log] [blame]
Guido van Rossume1f069e1990-10-25 18:51:42 +00001# Module 'Histogram'
2
3from Buttons import *
Guido van Rossume1f069e1990-10-25 18:51:42 +00004
5# A Histogram displays a histogram of numeric data.
Guido van Rossume1f069e1990-10-25 18:51:42 +00006#
Guido van Rossumce084481991-12-26 13:06:29 +00007class HistogramAppearance(LabelAppearance, Define):
Guido van Rossume1f069e1990-10-25 18:51:42 +00008 #
Guido van Rossum0c89ec71990-11-05 19:44:31 +00009 def define(self, parent):
10 Define.define(self, (parent, ''))
11 self.ydata = []
12 self.scale = (0, 100)
Guido van Rossume1f069e1990-10-25 18:51:42 +000013 return self
14 #
Guido van Rossum89a78691992-12-14 12:57:56 +000015 def setdata(self, ydata, scale):
Guido van Rossume1f069e1990-10-25 18:51:42 +000016 self.ydata = ydata
17 self.scale = scale # (min, max)
Guido van Rossum0c89ec71990-11-05 19:44:31 +000018 self.parent.change(self.bounds)
Guido van Rossume1f069e1990-10-25 18:51:42 +000019 #
Guido van Rossum0c89ec71990-11-05 19:44:31 +000020 def drawpict(self, d):
Guido van Rossume1f069e1990-10-25 18:51:42 +000021 (left, top), (right, bottom) = self.bounds
22 min, max = self.scale
23 size = max-min
24 width, height = right-left, bottom-top
Guido van Rossum0c89ec71990-11-05 19:44:31 +000025 ydata = self.ydata
26 npoints = len(ydata)
27 v1 = top + height # constant
28 h1 = left # changed in loop
29 for i in range(npoints):
30 h0 = h1
31 v0 = top + height - (ydata[i]-min)*height/size
32 h1 = left + (i+1) * width/npoints
Guido van Rossume1f069e1990-10-25 18:51:42 +000033 d.paint((h0, v0), (h1, v1))
34 #
Guido van Rossume1f069e1990-10-25 18:51:42 +000035
Guido van Rossumce084481991-12-26 13:06:29 +000036class Histogram(NoReactivity, HistogramAppearance): pass