我們之前已經接觸過了餅圖,它主要用于表現比例、份額類的資料,今天我們在樣式上進行更多的探索。
我們以筆記本行業來作為例子。假設筆記本電腦行業有ABCD五家公司,他們在2017年的國内市場佔有率分别為45%、25%、15%、5%,其他公司10%。
一、分裂餅圖
首先,我們可以将我們關注的分類單獨分裂出來,達到突出顯示的目的。假如我們在B公司裡,我們想要将自家公司的資料單獨拆出來:
import matplotlib as mplimport matplotlib.pyplot as plt# 生成資料labels = ['A', 'B', 'C', 'D', '其他']share = [0.45, 0.25, 0.15, 0.05, 0.10]# 設定分裂屬性explode = [0, 0.1, 0, 0, 0]# 分裂餅圖plt.pie(share, explode = explode, labels = labels, autopct = '%3.1f%%', startangle = 180, shadow = True, colors = ['c', 'r', 'gray', 'g', 'y']) # 标題plt.title('2017年筆記本電腦市場佔有率')plt.show()

可以看到,我們将自家公司的份額分裂出來了,這樣我們就能迅速定位到圖中最重要的部分。至于非分裂式的餅圖,直接将explode參數清單中的所有數都設定為0即可。
我們看下這些參數的作用:
explode:一個清單,用于指定每塊餅片邊緣偏離半徑的百分比labels:每份餅片的标簽autopct:數值百分比的樣式startangle:起始角度,跟四象限的角度一緻shadow:是否繪制陰影colors:餅片的顔色
二、内嵌環形餅圖
好,現在這幾家公司同時也在做PC市場,那我們想同時将PC市場的份額情況也展示出來,這時候,我們就可以考慮内嵌環形餅圖。
假設他們四家在2017年占有的PC市場佔有率分别是35%、35%、8%、7%,其他公司占有的份額是15%。
import matplotlib as mplimport matplotlib.pyplot as plt# 設定圖檔大小plt.figure(figsize = (10, 8))# 生成資料labels = ['A', 'B', 'C', 'D', '其他']share_laptop = [0.45, 0.25, 0.15, 0.05, 0.10]share_pc = [0.35, 0.35, 0.08, 0.07, 0.15]colors = ['c', 'r', 'y', 'g', 'gray']# 外環wedges1, texts1, autotexts1 = plt.pie(share_laptop, autopct = '%3.1f%%', radius = 1, pctdistance = 0.85, colors = colors, startangle = 180, textprops = {'color': 'w'}, wedgeprops = {'width': 0.3, 'edgecolor': 'w'})# 内環wedges2, texts2, autotexts2 = plt.pie(share_pc, autopct = '%3.1f%%', radius = 0.7, pctdistance = 0.75, colors = colors, startangle = 180, textprops = {'color': 'w'}, wedgeprops = {'width': 0.3, 'edgecolor': 'w'})# 圖例plt.legend(wedges1, labels, fontsize = 12, title = '公司清單', loc = 'center right', bbox_to_anchor = (1, 0.6))# 設定文本樣式plt.setp(autotexts1, size=15, weight='bold')plt.setp(autotexts2, size=15, weight='bold')plt.setp(texts1, size=15)# 标題plt.title('2017年筆記本及PC電腦市場佔有率', fontsize=20)plt.show()哈,這樣我們就可以很直覺地對比筆記本和PC市場的份額情況了。
這裡我們詳細說一下代碼。
首先,pie()函數傳回三個對象:wedge、text、autotext。
wedge:是指餅片,也就是每一個扇形texts:分類标簽的文本清單autotexts:這部分是百分比部分的文本清單後邊我們設定文本格式的時候會用到pie()函數傳回的對象。
在pie()函數中:
radius:半徑pctdistance:餅圖重心到autotexts對象的相對距離textprops:餅圖中百分比文本的屬性字典wedgeprops:餅圖的格式,這裡我們用width設定了環的寬度,使用edgecolor設定了邊緣顔色在legend()函數中,我們用fontsize設定文本大小,用title設定圖例的标題,用loc設定圖例的位置,用bbox_to_anchor設定了圖例的位置。