|
From: 不坏阿峰 <onl...@gm...> - 2014-06-19 04:27:43
|
thanks to Joe Kington <https://plus.google.com/u/0/115087865729901776991?prsrc=4>‘s help, i got this pie donuts i have modified code to generate pie base one the Num of list. but i do not know how to draw the text label like below, i need label inform of each pie . pls give me some guide. thanks a lot [image: 内嵌图片 1] ################################# from __future__ import unicode_literals import matplotlib.pyplot as plt import numpy as np import sys # os, random from PyQt4 import QtGui, QtCore #from numpy import arange, sin, pi from matplotlib import font_manager as fm from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas #from matplotlib.figure import Figure from mychart_ui import Ui_Form class MyMplCanvas(FigureCanvas): """Ultimately, this is a QWidget (as well as a FigureCanvasAgg, etc.).""" def __init__(self, parent=None, width=5, height=4, dpi=100): #fig = Figure(figsize=(width, height), dpi=dpi) # self.axes = fig.add_subplot(111) # We want the axes cleared every time plot() is called #self.axes.hold(False) plt.rcParams['font.size'] = 9 plt.rcParams['font.weight'] = 'normal' self.fig, self.axes = plt.subplots() self.compute_initial_figure() # FigureCanvas.__init__(self, self.fig) self.setParent(parent) FigureCanvas.setSizePolicy(self, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) FigureCanvas.updateGeometry(self) def compute_initial_figure(self): pass class MyStaticMplCanvas(MyMplCanvas): """Simple canvas with a sine plot.""" def compute_initial_figure(self): #fig, ax = plt.subplots() #ax.axis = ('equal') data = [[96, 124],[33, 64],[55, 96]] header = ['Hardware', 'Software'] def pie_plot(myfig,myaxes,data): fig = myfig ax = myaxes ax.set_position([-0.12, 0.4, 0.6, 0.6]) ax.axis('equal') ls = data r_len = 0.6 width = r_len/(len(ls)+1) print width kwargs = dict(colors=['#66FF66', '#9999FF', '#FF9999'], startangle=90) proptease = fm.FontProperties() proptease.set_size('xx-small') circle_ls = [] for i in range(len(ls)): print i circle_ls.append(pie(ax, ls[i], radius=r_len-width*i, pctdistance=1-width/2, **kwargs)) # outside = pie(ax, ls[0], radius=r_len, pctdistance=1-width/2, **kwargs) # middle = pie(ax,ls[1] , radius=r_len-width, # pctdistance=1-width/2, **kwargs) # middle2 = pie(ax,ls[1] , radius=r_len-width*2, # pctdistance=1-width/2, **kwargs) # inside = pie(ax,ls[2] , radius=r_len-width*3, # pctdistance=1-width/2, **kwargs) plt.setp(circle_ls, width=width, edgecolor='white') ax.legend(circle_ls[0][::-1], header, frameon=False) pie_plot(self.fig,self.axes,data) kwargs = dict(size=13, color='white', va='center', fontweight='bold') # ax.text(0, 0, 'Year 2005', ha='center', # bbox=dict(boxstyle='round', facecolor='blue', edgecolor='none'), # **kwargs) # ax.annotate('Year 2006', (0, 0), xytext=(np.radians(-45), 1.1), # bbox=dict(boxstyle='round', facecolor='green', edgecolor='none'), # textcoords='polar', ha='left', **kwargs) #ax.axes.plot() def pie(ax, values, **kwargs): total = sum(values) def formatter(pct): return '{:0.0f}\n{:0.1f}%'.format(pct*total/100,pct) wedges, _, labels = ax.pie(values, autopct=formatter, **kwargs) return wedges #plt.show() class myWidget(QtGui.QWidget, Ui_Form): def __init__(self,parent=None): QtGui.QWidget.__init__(self, parent) self.setupUi(self) self.pushButton.clicked.connect(self.draw) def draw(self): print '=' sc = MyStaticMplCanvas(self.matwidget, width=2, height=3, dpi=100) sc.show() qApp = QtGui.QApplication(sys.argv) # aw = ApplicationWindow() # aw.setWindowTitle("%s" % progname) aw = myWidget() aw.show() sys.exit(qApp.exec_()) #################################### |