Python 數據可視化:treemap 樹形圖 餅圖升級版超詳解,體現佔比的同時顯示出數量(放入自寫庫,一行代碼搞定複雜細節繪圖)

在這裏插入圖片描述
  這是一個自寫庫系列,即筆者在數據可視化路上踩過的坑的彙總,並自定義函數和傳入參數來實現快速避坑 + 快速繪製出複雜精美的圖片。

引言

  Python 的繪圖功能非常強大,如果能將已有的繪圖庫和各種複雜操作彙總在一個自己寫的庫/包中,並實現一行代碼就調用並實現複雜的繪圖功能,那就更強大了。所以本博文只強調繪圖代碼的實現,繪圖中的統計學知識(名義變量,數值變量,xx圖與xx圖的區別等等)與 Python 基礎庫操作(seaborn,matplotlib)並不會提及,不過也歡迎關注,後續會有更多更廣更豐富的知識瘋狂輸出。

使用方法 & 實現效果

在這裏插入圖片描述
細節圖

在這裏插入圖片描述
  爲什麼說樹形圖 treemap 是餅圖的升級版呢? 先來看看餅圖效果吧!
在這裏插入圖片描述
  不難看出,我們的目的是對北京幾個地區數據數目進行一個直觀的可視化,餅圖顏色會有點殺馬特(需要另外調整),佔比需要顯式設置;反觀樹形圖,佔比不用設置,方塊大小一目瞭然,數量也在每一列別的下面用小括號呈現了,配色也相對柔和。

  如果我們一定需要展示佔比情況的話,可以先使用 value_counts() 結合具體參數來觀察一下差別,後再決定是選用水平條形圖,垂直條形圖,餅圖,還是什麼堆疊面積圖之類的來繪製,這裏指明一個快捷的有點騷的技巧。初識 pandas 者肯定都知道大名鼎鼎的 value_counts() ,但如果我們能在括號中添加兩個小小的細節感滿滿的參數,效果就真的大不一樣了,請看下圖
在這裏插入圖片描述
  明顯可以看出,升級版 value_counts() 也就是添加了三個參數的 value_counts()還是有明顯的變化的

  • 有時候數目大,希望看出佔比情況而不是隻是顯示出數量
  • 升降序排列,誰多誰少一目瞭然,還可以直接在後面 .plot() 繪圖
  • dropna 參數的添加,避免數據中的空值佔比沒有算進去

  隨意畫個圖看下
在這裏插入圖片描述
  這是這裏的差別不明顯罷了,所以柱子長短對排名的呈現並不是那麼明顯,以後呈現的商業實戰就會賊明顯了

代碼展示!!

  代碼中的註釋已經非常非常詳細了!希望能夠幫你規避畫圖中的各種坑。繪圖代碼並不是自己創作的,而是從前人(創造繪圖庫的人)和各種大神的代碼中學習並積累下來的,爲了畫出一幅還比較完美的圖,已經踩過無數的坑了,最終通過自己設置函數和函數中的參數來進行自定義的傳參繪製,真的太難了

# 基礎繪圖庫
import matplotlib.pyplot as plt
import seaborn as sns
# %matplotlib inline
# 各種細節配置如 文字大小,圖例文字等雜項
large = 22; med = 16; small = 12
params = {'axes.titlesize': large,
          'legend.fontsize': med,
          'figure.figsize': (16, 10),
          'axes.labelsize': med,
          'axes.titlesize': med,
          'xtick.labelsize': med,
          'ytick.labelsize': med,
          'figure.titlesize': large}
plt.rcParams.update(params)
plt.style.use('seaborn-whitegrid')
sns.set_style("white")
plt.rc('font', **{'family': 'Microsoft YaHei, SimHei'})  # 設置中文字體的支持
# sns.set(font='SimHei')  # 解決Seaborn中文顯示問題,但會自動添加背景灰色網格
plt.rcParams['axes.unicode_minus'] = False  # 解決保存圖像是負號'-'顯示爲方塊的問題

# ====================== 樹形圖:餅圖升級版 =============================
def treemap(data, column, figsize=(12 ,8), title=None, ax=None):
    """
    data: 整份數據
    column:傳入格式 'col_name'
    基準行,求改行各定類變量的個數,並以佔比的情況反映在矩形區域中
    """
    import squarify # 這個庫需要 pip install 一下
    # Prepare Data
    # 下面這行代碼是 pandas 中非常經典的操作,根據選中的名義變量進行分組,
        ## 分組後求每組的元素數量,並重置索引,新增的索引列爲 counts,可以自己定製
        ## 這一行代碼可以單獨抽出來嘗試使用並理解
    data = data.groupby(column).size().reset_index(name='counts')
    # 下面的這三行代碼不用理解,就是在創造 squarify 時大神自己定義的
    labels = data.apply(lambda x: str(x[0]) + "\n (" + str(x[1]) + ")", axis=1)
    sizes = data['counts'].values.tolist() # 轉成列表
    colors = [plt.cm.Spectral( i /float(len(labels))) for i in range(len(labels))]

    # Draw Plot
    plt.figure(figsize=figsize, dpi= 80) # 設置圖片大小
    # 添加標籤,圖中部分元素
    squarify.plot(sizes=sizes, label=labels, color=colors, alpha=.8, ax=ax)

    # Decorate
    plt.title(title)
    plt.axis('off') # 關閉座標軸顯示
    plt.title(title)
    plt.show()



後記

  數據分析,商業實踐,數據可視化,網絡爬蟲,統計學,Excel,Word, 社會心理學,認知心理學,行爲科學,民族意志學 各種專欄後續瘋狂補充。

  歡迎評論與私信交流!

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