⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 owattributestatistics.py

📁 orange源码 数据挖掘技术
💻 PY
📖 第 1 页 / 共 2 页
字号:
		q1line = self.vbias + quartile1
		line4 = QCanvasLine(self)
		line4.setPoints (self.hbias-5, q1line, self.hbias+self.bar_width_pixels+5, q1line)
		line4.show()
		line4.setZ(1.0)
		crq1tR = QCanvasText ("25%", self)
		q1vTextPos = q1line - self.textHeight*0.5
		crq1tR.move(self.hbias+self.bar_width_pixels+textoffset, q1vTextPos)
		crq1tR.show()
		crq1tL = QCanvasText ("%5.2f" % self.q1, self)
		crq1tL.move(self.hbias-textoffset, q1vTextPos)
		crq1tL.setTextFlags(Qt.AlignRight)
		crq1tL.show()

		# draw a rectangle from min to the 1st quartile
		cr = QCanvasRectangle (self.hbias, self.vbias+quartile1, self.bar_width_pixels, self.bar_height_pixels-quartile1, self)
		cr.setPen (QPen(Qt.NoPen))
		cr.setBrush (QBrush(QColor(0,51,0)))
		cr.show()

		# draw a horizontal mean line; add text
		self.meanpos = int(self.bar_height_pixels*(self.maxi-self.mean)/bar_height)
		self.stddev1 = int(self.bar_height_pixels*self.stddev/bar_height)
		#print "stddev ",self.stddev1, self.bar_height_pixels, bar_height
		mvbias = self.meanpos+self.vbias
		line = QCanvasLine(self)
		line.setPoints (self.hbias+self.bar_width_pixels, mvbias, self.hbias+self.bar_width_pixels +70, mvbias)
		line.setPen (QPen(QColor(255, 0, 0), 1, Qt.SolidLine))
		line.show()
		line.setZ(1.0)
		t = QCanvasText ("mean", self)
		meanvTextPos = mvbias - self.textHeight*0.5
		t.setColor (QColor(255, 0, 0))
		t.move(self.hbias+self.bar_width_pixels+110, meanvTextPos)
		t.setTextFlags(Qt.AlignRight)
		t.show()
		t3 = QCanvasText ("%5.2f +- %5.2f" % (self.mean, self.stddev), self)
		t3.setColor (QColor(255, 0, 0))
		t3.move(self.hbias-textoffset, meanvTextPos)
		t3.setTextFlags(Qt.AlignRight)
		t3.show()

		# draw the short bold mean line in the bar
		bline = QCanvasLine(self)
		bline.setPoints (self.hbias+self.bar_width_pixels*0.25, mvbias, self.hbias+self.bar_width_pixels*0.75, mvbias)
		bline.setPen (QPen(QColor(255, 0, 0), 3, Qt.SolidLine))
		bline.show()
		bline.setZ(1.0)

		# draw the std dev. line
		vert = QCanvasLine(self)
		vert.setPoints (self.hbias+self.bar_width_pixels*0.5, mvbias-self.stddev1, self.hbias+self.bar_width_pixels*0.5, mvbias+self.stddev1)
		vert.setPen (QPen(QColor(255, 0, 0), 1, Qt.SolidLine))
		vert.show()
		vert.setZ(1.0)

		# display the numbers of total and distinct values
		t1 = QCanvasText ("%d total values" % self.total_values, self)
		t1.move(10,self.vbias+self.bar_height_pixels+20)
		t1.show()
		t2 = QCanvasText ("%d distinct values" % self.distinct_values, self)
		t2.move(10,self.vbias+self.bar_height_pixels+40)
		t2.show()

		vspace = self.textHeight  # +4 space for text plus 2 pixels above and below
		#pos =['max':maxvTextPos, 'q3':q3vTextPos, 'mean':meanvTextPos, 'med':medvTextPos, 'q1':q1vTextPos, 'min':minvTextPos]
		#positions = [maxvTextPos, q3vTextPos, meanvTextPos, medvTextPos, q1vTextPos, minvTextPos]
		if meanvTextPos < medvTextPos:
			positions = [(maxvTextPos,'max'), (q3vTextPos,'q3'), (meanvTextPos,'mean'), (medvTextPos,'med'), (q1vTextPos,'q1'), (minvTextPos,'min')]
		elif meanvTextPos > medvTextPos:
			positions = [(maxvTextPos,'max'), (q3vTextPos,'q3'), (medvTextPos,'med'), (meanvTextPos,'mean'), (q1vTextPos,'q1'), (minvTextPos,'min')]
		else: # mean == median; put median below or above mean (where there's more space)
			if meanvTextPos-maxvTextPos >= minvTextPos-meanvTextPos:
				positions = [(maxvTextPos,'max'), (q3vTextPos,'q3'), (medvTextPos,'med'), (meanvTextPos,'mean'), (q1vTextPos,'q1'), (minvTextPos,'min')]
			else:
				positions = [(maxvTextPos,'max'), (q3vTextPos,'q3'), (meanvTextPos,'mean'), (medvTextPos,'med'), (q1vTextPos,'q1'), (minvTextPos,'min')]
		lp = len(positions)
		mean_index = -1
		for i in range(len(positions)):
			if positions[i][1]=='mean':
				mean_index = i
				break
		if mean_index==-1:
			print "ERROR in OWAttributeStatistics"
		#above = [positions[i] for i in range(mean_index,-1,-1)]
		#below = [positions[i] for i in range(mean_index, lp)]
		above = [i for i in positions if i[0]<=meanvTextPos]
		below = [i for i in positions if i[0]>=meanvTextPos]
		above.sort()
		above.reverse()
		below.sort()
		#print above
		#print below
		#print positions
		above_space = above[0][0] - above[-1][0] - (len(above)-2)*vspace
		below_space = below[-1][0] - below[0][0] - (len(below)-2)*vspace
		#print above_space, below_space
		for i in range(1,len(above)):
			dif = above[i-1][0] - above[i][0]
			if dif < vspace:
				#if i==len(above)-1:
				#	above[i-1] = (above[i-1][0] + vspace - dif, above[i-1][1])
				#	print "ABOVE 1", i
				#	print
				#else:
				above[i] = (above[i][0] - vspace + dif, above[i][1])
		#print above
		for i in range(1,len(below)):
			dif = below[i][0] - below[i-1][0]
			if dif < vspace:
				#if i==len(below)-1:
				#	below[i-1] = (below[i-1][0] - vspace +dif, below[i-1][1])
				#	print "BELOW 1", i
				#	print "dif ", dif
				#else:
				below[i] = (below[i][0] + vspace - dif, below[i][1])
		#print below
		# move the text to the new coordinates
		for i in range(1,len(above)):
			val, lab = above[i][0], above[i][1]
			if lab == 'max':
				if val != maxvTextPos:
					maxi_txt.move (self.hbias+self.bar_width_pixels+textoffset, val)
					maxi_txtL.move (self.hbias-textoffset, val)
					l = QCanvasLine(self)
					#print max_line
					l.setPoints (self.hbias+self.bar_width_pixels+5, self.vbias, self.hbias+self.bar_width_pixels+10, val+self.textHeight*0.5)
					l.show()
					l = QCanvasLine(self)
					l.setPoints (self.hbias+self.bar_width_pixels+10, val+self.textHeight*0.5, self.hbias+self.bar_width_pixels+12, val+self.textHeight*0.5)
					l.show()
					l = QCanvasLine(self)
					l.setPoints (self.hbias-5, self.vbias, self.hbias-10, val+self.textHeight*0.5)
					l.show()
					l = QCanvasLine(self)
					l.setPoints (self.hbias-10, val+self.textHeight*0.5, self.hbias-12, val+self.textHeight*0.5)
					l.show()
			elif lab == 'q3':
				if val != q3vTextPos:
					crq3tR.move (self.hbias+self.bar_width_pixels+textoffset, val)
					crq3tL.move (self.hbias-textoffset, val)
					l = QCanvasLine(self)
					l.setPoints (self.hbias+self.bar_width_pixels+5, q3line, self.hbias+self.bar_width_pixels+10, val+self.textHeight*0.5)
					l.show()
					l = QCanvasLine(self)
					l.setPoints (self.hbias+self.bar_width_pixels+10, val+self.textHeight*0.5, self.hbias+self.bar_width_pixels+12, val+self.textHeight*0.5)
					l.show()
					l = QCanvasLine(self)
					l.setPoints (self.hbias-5, q3line, self.hbias-10, val+self.textHeight*0.5)
					l.show()
					l = QCanvasLine(self)
					l.setPoints (self.hbias-10, val+self.textHeight*0.5, self.hbias-12, val+self.textHeight*0.5)
					l.show()
			elif lab == 'med':
				if val != medvTextPos:
					crmtR.move (self.hbias+self.bar_width_pixels+15, val)
					crmtL.move (self.hbias-15, val)
					l = QCanvasLine(self)
					l.setPoints (self.hbias+self.bar_width_pixels+5, mline, self.hbias+self.bar_width_pixels+10, val+self.textHeight*0.5)
					l.show()
					l = QCanvasLine(self)
					l.setPoints (self.hbias+self.bar_width_pixels+10, val+self.textHeight*0.5, self.hbias+self.bar_width_pixels+12, val+self.textHeight*0.5)
					l.show()
					l = QCanvasLine(self)
					l.setPoints (self.hbias-5, mline, self.hbias-10, val+self.textHeight*0.5)
					l.show()
					l = QCanvasLine(self)
					l.setPoints (self.hbias-10, val+self.textHeight*0.5, self.hbias-12, val+self.textHeight*0.5)
					l.show()
			elif lab == 'q1':
				if val != q1vTextPos:
					crq1tR.move (self.hbias+self.bar_width_pixels+textoffset, val)
					crq1tL.move (self.hbias-textoffset, val)
					l = QCanvasLine(self)
					l.setPoints (self.hbias+self.bar_width_pixels+5, q1line, self.hbias+self.bar_width_pixels+10, val+self.textHeight*0.5)
					l.show()
					l = QCanvasLine(self)
					l.setPoints (self.hbias+self.bar_width_pixels+10, val+self.textHeight*0.5, self.hbias+self.bar_width_pixels+12, val+self.textHeight*0.5)
					l.show()
					l = QCanvasLine(self)
					l.setPoints (self.hbias-5, q1line, self.hbias-10, val+self.textHeight*0.5)
					l.show()
					l = QCanvasLine(self)
					l.setPoints (self.hbias-10, val+self.textHeight*0.5, self.hbias-12, val+self.textHeight*0.5)
					l.show()
		for i in range(1,len(below)):
			val, lab = below[i][0], below[i][1]
			if lab == 'min':
				if val != minvTextPos:
					mini_txt.move (self.hbias+self.bar_width_pixels+textoffset, val)
					mini_txtL.move (self.hbias-textoffset, val)
					l = QCanvasLine(self)
					l.setPoints (self.hbias+self.bar_width_pixels+5, self.bar_height_pixels+self.vbias, self.hbias+self.bar_width_pixels+10, val+self.textHeight*0.5)
					l.show()
					l = QCanvasLine(self)
					l.setPoints (self.hbias+self.bar_width_pixels+10, val+self.textHeight*0.5, self.hbias+self.bar_width_pixels+12, val+self.textHeight*0.5)
					l.show()
					l = QCanvasLine(self)
					l.setPoints (self.hbias-5, self.bar_height_pixels+self.vbias, self.hbias-10, val+self.textHeight*0.5)
					l.show()
					l = QCanvasLine(self)
					l.setPoints (self.hbias-10, val+self.textHeight*0.5, self.hbias-12, val+self.textHeight*0.5)
					l.show()
			elif lab == 'q1':
				if val != q1vTextPos:
					crq1tR.move (self.hbias+self.bar_width_pixels+textoffset, val)
					crq1tL.move (self.hbias-textoffset, val)
					l = QCanvasLine(self)
					l.setPoints (self.hbias+self.bar_width_pixels+5, q1line, self.hbias+self.bar_width_pixels+10, val+self.textHeight*0.5)
					l.show()
					l = QCanvasLine(self)
					l.setPoints (self.hbias+self.bar_width_pixels+10, val+self.textHeight*0.5, self.hbias+self.bar_width_pixels+12, val+self.textHeight*0.5)
					l.show()
					l = QCanvasLine(self)
					l.setPoints (self.hbias-5, q1line, self.hbias-10, val+self.textHeight*0.5)
					l.show()
					l = QCanvasLine(self)
					l.setPoints (self.hbias-10, val+self.textHeight*0.5, self.hbias-12, val+self.textHeight*0.5)
					l.show()
			elif lab == 'med':
				if val != medvTextPos:
					crmtR.move (self.hbias+self.bar_width_pixels+textoffset, val)
					crmtL.move (self.hbias-textoffset, val)
					l = QCanvasLine(self)
					l.setPoints (self.hbias+self.bar_width_pixels+5, mline, self.hbias+self.bar_width_pixels+10, val+self.textHeight*0.5)
					l.show()
					l = QCanvasLine(self)
					l.setPoints (self.hbias+self.bar_width_pixels+10, val+self.textHeight*0.5, self.hbias+self.bar_width_pixels+12, val+self.textHeight*0.5)
					l.show()
					l = QCanvasLine(self)
					l.setPoints (self.hbias-5, mline, self.hbias-10, val+self.textHeight*0.5)
					l.show()
					l = QCanvasLine(self)
					l.setPoints (self.hbias-10, val+self.textHeight*0.5, self.hbias-12, val+self.textHeight*0.5)
					l.show()
			elif lab == 'q3':
				if val != q3vTextPos:
					crq3tR.move (self.hbias+self.bar_width_pixels+textoffset, val)
					crq3tL.move (self.hbias-textoffset, val)
					l = QCanvasLine(self)
					l.setPoints (self.hbias+self.bar_width_pixels+5, q3line, self.hbias+self.bar_width_pixels+10, val+self.textHeight*0.5)
					l.show()
					l = QCanvasLine(self)
					l.setPoints (self.hbias+self.bar_width_pixels+10, val+self.textHeight*0.5, self.hbias+self.bar_width_pixels+12, val+self.textHeight*0.5)
					l.show()
					l = QCanvasLine(self)
					l.setPoints (self.hbias-5, q3line, self.hbias-10, val+self.textHeight*0.5)
					l.show()
					l = QCanvasLine(self)
					l.setPoints (self.hbias-10, val+self.textHeight*0.5, self.hbias-12, val+self.textHeight*0.5)
					l.show()
		#print


#test widget appearance
if __name__=="__main__":
	a=QApplication(sys.argv)
	ow=OWAttributeStatistics()
	a.setMainWidget(ow)
	data = orange.ExampleTable('adult_sample')
	data = orange.ExampleTable('adult_sample_noclass')
	ow.data(data)
	ow.show()
	a.exec_loop()
	ow.saveSettings()

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -