legend()
關鍵就是在于這裡:添加一個圖例
plt.legend(loc='best')
調試圖例的位置
在legend的參數中, loc參數設定圖例的顯示位置的:
plt.legend([l1, l2], ['first', 'second'], loc = 'upper right') #其中,loc表示位置的;
'best' : 0, (only implemented for axes legends)(自适應方式)
'upper right' : 1,
'upper left' : 2,
'lower left' : 3,
'lower right' : 4,
'right' : 5,
'center left' : 6,
'center right' : 7,
'lower center' : 8,
'upper center' : 9,
'center' : 10,
顯示中文,中文的格式、顯示負号
#coding:utf-8
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文标簽
plt.rcParams['axes.unicode_minus']=False #用來正常顯示負号
#有中文出現的情況,需要u'内容'
labels = u'男性好友', u'女性好友', u'未填性别'
下面是Windows的字型對應名稱,Follow your heart, 各種換!
黑體 SimHei
微軟雅黑 Microsoft YaHei
微軟正黑體 Microsoft JhengHei
新宋體 NSimSun
新細明體 PMingLiU
細明體 MingLiU
标楷體 DFKai-SB
仿宋 FangSong
楷體 KaiTi
仿宋_GB2312 FangSong_GB2312
楷體_GB2312 KaiTi_GB2312
顔色,顯示顔色
colors = ['red','yellowgreen','lightskyblue']
plt.pie(sizes,explode=explode,labels=labels,colors=colors,
labeldistance = 1.1,autopct = '%3.1f%%',shadow = False,
startangle = 90,pctdistance = 0.6)

image
第一次改進(改進了圖形顔色,并添加了圖例)
# -*- coding: UTF-8 -*-
import matplotlib.pyplot as plt
#顯示中文 YaHei JhengHei
plt.rcParams['font.sans-serif']=['Microsoft JhengHei']
male = 70
female = 20
other = 10
total = 100
# Pie chart, where the slices will be ordered and plotted counter-clockwise:
labels =[ u'男性', u'女性', u'未填']
sizes = [male,female,other]
colors = ['cornflowerblue','orange','limegreen']
explode = (0, 0.1, 0)
fig1, ax1 = plt.subplots()
'''ax1.pie(sizes, explode=explode, labels=labels, colors=colors, autopct='%1.1f%%',
shadow=True, startangle=90)'''
#相對于,去掉了陰影shadow=True
ax1.pie(sizes, explode=explode, labels=labels, colors=colors,
autopct='%1.1f%%', shadow=False, startangle=90)
ax1.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle.
# 關鍵就是在于這裡:添加一個圖例
plt.legend(loc='upper right')
plt.show()

image
第二次改進(改進了文字顔色)
from matplotlib import pyplot as plt
#調節圖形大小,寬,高
plt.figure(figsize=(6,9))
#定義餅狀圖的标簽,标簽是清單
labels = [u'第一部分',u'第二部分',u'第三部分']
#每個标簽占多大,會自動去算百分比
sizes = [60,30,10]
colors = ['red','yellowgreen','lightskyblue']
#将某部分爆炸出來, 使用括号,将第一塊分割出來,數值的大小是分割出來的與其他兩塊的間隙
explode = (0.05,0,0)
patches,l_text,p_text = plt.pie(sizes,explode=explode,labels=labels,colors=colors,
labeldistance = 1.1,autopct = '%3.1f%%',shadow = False,
startangle = 90,pctdistance = 0.6)
#labeldistance,文本的位置離遠點有多遠,1.1指1.1倍半徑的位置
#autopct,圓裡面的文本格式,%3.1f%%表示小數有三位,整數有一位的浮點數
#shadow,餅是否有陰影
#startangle,起始角度,0,表示從0開始逆時針轉,為第一塊。一般選擇從90度開始比較好看
#pctdistance,百分比的text離圓心的距離
#patches, l_texts, p_texts,為了得到餅圖的傳回值,p_texts餅圖内部文本的,l_texts餅圖外label的文本
#改變文本的大小
#方法是把每一個text周遊。調用set_size方法設定它的屬性
for t in l_text:
t.set_size=(30)
for t in p_text:
t.set_size=(20)
# 設定x,y軸刻度一緻,這樣餅圖才能是圓的
plt.axis('equal')
plt.legend()
plt.show()

image
補充第二個例子
餅圖的繪制可以使用matplotlib庫中的pie函數
plt.pie(x, explode=None, labels=None, colors=None,
autopct=None, pctdistance=0.6, shadow=False,
labeldistance=1.1, startangle=None,
radius=None, counterclock=True, wedgeprops=None,
textprops=None, center=(0, 0), frame=False)
x:指定繪圖的資料;
explode:指定餅圖某些部分的突出顯示,即呈現爆炸式;
labels:為餅圖添加标簽說明,類似于圖例說明;
colors:指定餅圖的填充色;
autopct:自動添加百分比顯示,可以采用格式化的方法顯示;
pctdistance:設定百分比标簽與圓心的距離;
shadow:是否添加餅圖的陰影效果;
labeldistance:設定各扇形标簽(圖例)與圓心的距離;
startangle:設定餅圖的初始擺放角度;
radius:設定餅圖的半徑大小;
counterclock:是否讓餅圖按逆時針順序呈現;
wedgeprops:設定餅圖内外邊界的屬性,如邊界線的粗細、顔色等;
textprops:設定餅圖中文本的屬性,如字型大小、顔色等;
center:指定餅圖的中心點位置,預設為原點
frame:是否要顯示餅圖背後的圖框,如果設定為True的話,需要同時控制圖框x軸、y軸的範圍和餅圖的中心位置
# 導入第三方子產品
import matplotlib.pyplot as plt
# 設定繪圖的主題風格(不妨使用R中的ggplot分隔)
plt.style.use('ggplot')
# 構造資料
edu = [0.2515,0.3724,0.3336,0.0368,0.0057]
labels = ['中專','大專','大學','碩士','其他']
explode = [0,0.1,0,0,0] # 用于突出顯示大專學曆人群
colors=['#9999ff','#ff9999','#7777aa','#2442aa','#dd5555'] # 自定義顔色
# 中文亂碼和坐标軸負号的處理
plt.rcParams['font.sans-serif'] = ['Dengxian']
plt.rcParams['axes.unicode_minus'] = False
# 将橫、縱坐标軸标準化處理,保證餅圖是一個正圓,否則為橢圓
plt.axes(aspect='equal')
# 控制x軸和y軸的範圍
plt.xlim(0,5)
plt.ylim(0,5)
# 繪制餅圖
plt.pie(x = edu, # 繪圖資料
explode=explode, # 突出顯示大專人群
labels=labels, # 添加教育水準标簽
colors=colors, # 設定餅圖的自定義填充色
autopct='%.1f%%', # 設定百分比的格式,這裡保留一位小數
pctdistance=0.8, # 設定百分比标簽與圓心的距離
labeldistance = 1.4, # 設定教育水準标簽與圓心的距離
startangle = 180, # 設定餅圖的初始角度
radius = 1.5, # 設定餅圖的半徑
counterclock = False, # 是否逆時針,這裡設定為順時針方向
wedgeprops = {'linewidth': 1.5, 'edgecolor':'black'},# 設定餅圖内外邊界的屬性值
textprops = {'fontsize':12, 'color':'k'}, # 設定文本标簽的屬性值
center = (2.5, 2.5), # 設定餅圖的原點
frame = 1 )# 是否顯示餅圖的圖框,這裡設定顯示
# 删除x軸和y軸的刻度
plt.xticks(())
plt.yticks(())
# 添加圖示題
plt.title('芝麻信用失信使用者教育水準分布')
# 顯示圖形
plt.show()

image
參考資料: