從零開始學Python視覺化(五): 餅圖及環形圖

weixin_33832340發表於2018-11-26

我們之前已經接觸過了餅圖,它主要用於表現比例、份額類的資料,今天我們在樣式上進行更多的探索。

我們以筆記本行業來作為例子。假設膝上型電腦行業有ABCD五家公司,他們在2017年的國內市場份額分別為45%、25%、15%、5%,其他公司10%。


歡迎大家關注我的個人部落格【數洞】 【備用站】

一、分裂餅圖

首先,我們可以將我們關注的分類單獨分裂出來,達到突出顯示的目的。假如我們在B公司裡,我們想要將自家公司的資料單獨拆出來:

import matplotlib as mpl
import 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:餅片的顏色
14318844-10d4cb76b65f6495.png
image

二、內嵌環形餅圖

好,現在這幾家公司同時也在做PC市場,那我們想同時將PC市場的份額情況也展示出來,這時候,我們就可以考慮內嵌環形餅圖。

假設他們四家在2017年佔有的PC市場份額分別是35%、35%、8%、7%,其他公司佔有的份額是15%。

import matplotlib as mpl
import 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市場的份額情況了。

14318844-ab47c8cc79aed39a.png
image

這裡我們詳細說一下程式碼。

首先,pie()函式返回三個物件:wedge、text、autotext。

  • wedge:是指餅片,也就是每一個扇形
  • texts:分類標籤的文字列表
  • autotexts:這部分是百分比部分的文字列表

後邊我們設定文字格式的時候會用到pie()函式返回的物件。

在pie()函式中:

  • radius:半徑
  • pctdistance:餅圖重心到autotexts物件的相對距離
  • textprops:餅圖中百分比文字的屬性字典
  • wedgeprops:餅圖的格式,這裡我們用width設定了環的寬度,使用edgecolor設定了邊緣顏色

在legend()函式中,我們用fontsize設定文字大小,用title設定圖例的標題,用loc設定圖例的位置,用bbox_to_anchor設定了圖例的位置。

相關文章