📄 owattributestatistics.py
字号:
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 + -