Matplotlib餅圖、環圖繪製代碼

不只是餅狀圖,Matplotlb的官網上Example頁面下有各種圖表的例子(Matplotlib-Examples),因此,如果想要繪製圖表,建議先到官網上看一看,挑選合適的圖表,如果不懂的話,再找其他資料學習。
最近需要繪製餅狀圖(其實是環狀圖),其實簡單繪製的話是很簡單的,但是對參數進行一些調整的話會使圖表變得很好看,這裏重點記錄一下pie()函數的一些重要參數,同時記錄一下這份代碼作爲Demo,方便之後改動使用,這份代碼是根據官方代碼改動的:

import numpy as np
import matplotlib
import matplotlib.pyplot as plt


# 指定本地字體 使用 fontproperties=myfont 調用 沒有這個屬性的無法使用
# myfont = matplotlib.font_manager.FontProperties(fname=r"times.ttf")

# 創建、返回 Figure 對象和 Axes 子圖對象
fig, ax = plt.subplots(figsize=(12, 6))

recipe_data = [375, 75, 250, 300, 200]
recipe_labels = ['dataa', 'datab', 'datac', 'datad', 'datae']


# 凸顯的塊偏離的程度 例如 0.5就是顯示在離中心點 1.5r的位置
explode = [0, 0.3, 0, 0, 0]

# 用來規定輸出格式的函數
def func(pct, allvals):
    absolute = int(pct/100.*np.sum(allvals))
    return "{:.1f}%\n({:d})".format(pct, absolute)

# 顏色列表
colors=['#06799f', '#4c8e9e','#3aaacf','#33cccc', '#91cdcb']
# colors = ['#7bcdca','#499b98','#467472', '#89a1d5', '#9dafd5']


'''
函數調用格式:
    matplotlib.pyplot.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, rotatelabels=False, hold=None, data=None)
其中:
x:數據
labels: 每個塊的標記列表 在legend和作爲圖表外標記使用
colors: string list顏色參數列表
explode: float list 每個塊偏移的程度 如果是0.5 就表示偏離中心 1.5r 用來凸顯某一塊
autopct: string format 標註 或者是使用函數方式(一般傳入一個lambda函數用來匹配數據和不同的標註)
pctdistance: float 塊上標記文字距離中心的程度(0,1)
textprops:dict 用來設置文本對象的一些屬性例如:textprobs = dict(color='w') 或者 textprobs = {color:'w'} 表示標註文字的顏色是白色
wedgeprops:dict  設置wedge對象的一些參數 例如 wedgeprops={'linewidth':3, 'width':0.5, 'edgecolor':'w'} 
                                                           圖表線條寬     設置是否圈的環的比例(0,1), 不同塊的邊界顏色
counterclock:bool 指定指針方向,順時針或者逆時針。
startangle: float 從x軸開始逆時針開始偏移的角度
shadow: bool 是否添加陰影
center:float list 圖標中心位置。                                                         
labeldistance:float 被畫餅標記的直徑。
frame:bool 表的軸框架。
rotatelabels:bool 旋轉每個label到指定的角度。                                                
radius: float 半徑

返回值:
patches:list matplotlib.patches.Wedge對象列表。
text:list 餅(圈)內部的文字
autotexts:list 餅(圈)外部的文字
'''
wedges, texts, autotexts = ax.pie(x=recipe_data,
                                  labels=recipe_labels,
                                  # autopct='%1.1f%%',   autopct後面跟的兩種形式  這種格式就是 像12.3%的百分比一位小數
                                  autopct=lambda pct: func(pct ,recipe_data),
                                  explode=explode,
                                  colors=colors,
                                  pctdistance=0.7,
                                  textprops=dict(color="w"),  # 設置白色會看不到圓外部的文字(背景是白色)
                                  # 設置環的比例佔一半
                                  wedgeprops = {'width': 0.5, 'linewidth': 1, 'edgecolor':'w'}
                                  )

# 設置圖例中的一些屬性
ax.legend(wedges, recipe_labels,
          title="legends",
          title_fontsize=15,
          fontsize=17,
          loc="center left",
          bbox_to_anchor=(1, 0, 0.5, 1))

plt.setp(autotexts, size=12, weight="bold")    # 文字的大小之類
ax.set_title("Pie Chart", fontdict={'fontsize':15, 'fontweight':15})
# 如果直接對figure對象設置的話,會有一個參數fontproperties,後面跟的就是自己定義使用的字體
# plt.title("Matplotlib bakery: A pie", fontproperties=myfont, fontsize=15)

# plt.savefig('test01')   保存
plt.show()

效果:
在這裏插入圖片描述

實際上,繪製好看的圖表的一個重要方面就是圖表的配色,這個配色我是根據很多論文常用的顏色設置的,網絡上會有很多配色的網站,可以簡單學習一下配色的方法,例如這個網站:Color Scheme Designer,會幫助你選擇更合理的顏色搭配來讓你的圖表更好看。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章