| 
									
										
										
										
											1990-10-25 18:51:42 +00:00
										 |  |  | # Module 'Histogram' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from Buttons import * | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # A Histogram displays a histogram of numeric data. | 
					
						
							|  |  |  | # | 
					
						
							| 
									
										
										
										
											1991-12-26 13:06:29 +00:00
										 |  |  | class HistogramAppearance(LabelAppearance, Define): | 
					
						
							| 
									
										
										
										
											1990-10-25 18:51:42 +00:00
										 |  |  | 	# | 
					
						
							| 
									
										
										
										
											1990-11-05 19:44:31 +00:00
										 |  |  | 	def define(self, parent): | 
					
						
							|  |  |  | 		Define.define(self, (parent, '')) | 
					
						
							|  |  |  | 		self.ydata = [] | 
					
						
							|  |  |  | 		self.scale = (0, 100) | 
					
						
							| 
									
										
										
										
											1990-10-25 18:51:42 +00:00
										 |  |  | 		return self | 
					
						
							|  |  |  | 	# | 
					
						
							| 
									
										
										
										
											1992-12-14 12:57:56 +00:00
										 |  |  | 	def setdata(self, ydata, scale): | 
					
						
							| 
									
										
										
										
											1990-10-25 18:51:42 +00:00
										 |  |  | 		self.ydata = ydata | 
					
						
							|  |  |  | 		self.scale = scale # (min, max) | 
					
						
							| 
									
										
										
										
											1990-11-05 19:44:31 +00:00
										 |  |  | 		self.parent.change(self.bounds) | 
					
						
							| 
									
										
										
										
											1990-10-25 18:51:42 +00:00
										 |  |  | 	# | 
					
						
							| 
									
										
										
										
											1990-11-05 19:44:31 +00:00
										 |  |  | 	def drawpict(self, d): | 
					
						
							| 
									
										
										
										
											1990-10-25 18:51:42 +00:00
										 |  |  | 		(left, top), (right, bottom) = self.bounds | 
					
						
							|  |  |  | 		min, max = self.scale | 
					
						
							|  |  |  | 		size = max-min | 
					
						
							|  |  |  | 		width, height = right-left, bottom-top | 
					
						
							| 
									
										
										
										
											1990-11-05 19:44:31 +00:00
										 |  |  | 		ydata = self.ydata | 
					
						
							|  |  |  | 		npoints = len(ydata) | 
					
						
							|  |  |  | 		v1 = top + height	# constant | 
					
						
							|  |  |  | 		h1 = left		# changed in loop | 
					
						
							|  |  |  | 		for i in range(npoints): | 
					
						
							|  |  |  | 			h0 = h1 | 
					
						
							|  |  |  | 			v0 = top + height - (ydata[i]-min)*height/size | 
					
						
							|  |  |  | 			h1 = left + (i+1) * width/npoints | 
					
						
							| 
									
										
										
										
											1990-10-25 18:51:42 +00:00
										 |  |  | 			d.paint((h0, v0), (h1, v1)) | 
					
						
							|  |  |  | 	# | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-12-26 13:06:29 +00:00
										 |  |  | class Histogram(NoReactivity, HistogramAppearance): pass |