數據可視化實例(五): 氣泡圖(matplotlib,pandas)


https://datawhalechina.github.io/pms50/#/chapter2/chapter2

關聯 (Correlation)

關聯圖表用於可視化2個或更多變量之間的關系。 也就是說,一個變量如何相對於另一個變化。

帶邊界的氣泡圖

有時,您希望在邊界內顯示一組點以強調其重要性。 在這個例子中,你從數據框中獲取記錄,並用下面代碼中描述的 encircle() 來使邊界顯示出來。

導入所需要的庫

# 導入numpy庫
import numpy as np
# 導入pandas庫
import pandas as pd
# 導入matplotlib庫
import matplotlib as mpl
import matplotlib.pyplot as plt
# 導入seaborn庫
import seaborn as sns
# 在jupyter notebook顯示圖像
%matplotlib inline

# 導入patches
from matplotlib import patches
# 導入ConvexHull
from scipy.spatial import ConvexHull

設定圖像各種屬性

large = 22; med = 16; small = 12
            # 設置子圖上的標題字體
params = {'axes.titlesize': large,  
            # 設置圖例的字體
          'legend.fontsize': med,
            # 設置圖像的畫布
          'figure.figsize': (16, 10),  
            # 設置標簽的字體
          'axes.labelsize': med, 
            # 設置x軸上的標尺的字體
          'xtick.labelsize': med,  
            # 設置整個畫布的標題字體
          'ytick.labelsize': med,  
          'figure.titlesize': large}  
# 更新默認屬性
plt.rcParams.update(params)  
 # 設定整體風格
plt.style.use('seaborn-whitegrid')
# 設定整體背景風格
sns.set_style("white")  

程序代碼

# step1:導入數據

midwest = pd.read_csv("https://raw.githubusercontent.com/selva86/datasets/master/midwest_filter.csv")
# 准備數據以及顏色
categories = np.unique(midwest["category"])   # 使用np.umique對midwest["category"]去重
    # 使用列表推導式,建立colors列表
    # 14個數據,0-13
colors = [plt.cm.tab10(i/float(len(categories) - 1)) for i in range(len(categories))]

# step2:為每個類別繪制具有獨特顏色的散點圖

    # 建立畫布
plt.figure(figsize=(16, 10),  # 繪圖尺寸默認為(6.4, 4.8)
           dpi = 80,          # 圖像分辨效率,默認dpi為100
          facecolor =  "w",   # 背景顏色,默認為白色
          edgecolor = 'k')    # 邊框顏色,默認為白色

    # 繪圖
         # 使用函數enumerate:將可遍歷的數據對象組合為一個索引序列,同時列出數據和數據索引
for i, category in enumerate(categories):
    plt.scatter('area', 'poptotal',                                # 橫縱坐標
                data=midwest.loc[midwest.category==category, :]    # 橫縱坐標所對應的數據 
                , s="dot_size"                                     # 數據尺寸大小 
                , c= np.array(colors[i]).reshape(1,-1)
                , label=str(category)                              # 設定標簽名稱
                , edgecolors= np.array(colors[i]).reshape(1,-1)    # 標記的邊緣顏色
                # , alpha = 0.7
                , linewidths=.5)                                   # 線寬               

# step3:Encircling

    # 定義繪制畫環繞的函數
def encircle(x, y, ax=None, **kw):

    if not ax: ax = plt.gca()                         # 如果沒有子圖對象,那么就創建一個新的子圖對象
    # np.c_中的c是column(列)的縮寫,是按列疊加兩個矩陣的意思,也可以說是按行連接兩個矩陣,就是把兩矩陣左右相加,要求行數相等,類似於pandas中的merge()。
    p = np.c_[x, y]
    hull = ConvexHull(p)                              # 將數據集輸入到ConverHull中,自動生成凸包類型的對象(hull)
    ploy = plt.Polygon(p[hull.vertices, :], **kw)     # 利用plt.Polygon繪制多邊形
    ax.add_patch(ploy)                                # 將多邊形ploy修補到當前子圖中 

    # 選擇要包圍的數據
midwest_encircle_data = midwest.loc[midwest.state == 'IN', :]

# step4:繪制頂點周圍的多邊形

    # 繪畫線條
encircle(midwest_encircle_data.area,
         midwest_encircle_data.poptotal,
        ec = "firebrick",                # 線條顏色
        fc = 'none',
        linewidth = 1.5)                 # 線寬
    # 背景顏色
encircle(midwest_encircle_data.area, 
        midwest_encircle_data.poptotal,
        ec = 'none',                     # 線條顏色  
        fc = 'gold',
        alpha = 0.1)                     # 透明度

# step5:裝飾

plt.gca().set(xlim = (0.0, 0.12),        # 設置x坐標軸的范圍   
              ylim = (0, 90000),         # 設置y坐標軸的范圍    
            xlabel = "Area",             # 設置x坐標的標題
            ylabel = "Population")       # 設置y坐標的標題 

plt.xticks(fontsize = 12)                # 設置x坐標的字體
plt.yticks(fontsize = 12)                # 設置y坐標的字體
plt.title("Bubble Plot with Encircling", fontsize=22)     # 設置圖像標題和字體字體
plt.legend(fontsize = 12)                                 # 顯示圖例,設置圖例大小
plt.show()

氣泡圖

博文總結

np.unique

  • 該函數是去除數組中的重復數字,並進行排序之后輸出。

列表推導式

  • 列表推導式(又稱列表解析式)提供了一種簡明扼要的方法來創建列表。
  • 它的結構是在一個中括號里包含一個表達式,然后是一個for語句,然后是 0 個或多個 for 或者 if 語句。那個表達式可以是任意的,意思是你可以在列 表中放入任意類型的對象。返回結果將是一個新的列表,在這個以 if 和 for 語句為上下文的表達式運行完成之后產生。
  • 列表推導式的執行順序:各語句之間是嵌套關系,左邊第二個語句是最外層,依次往右進一層,左邊第一條語句是最后一層。
  • colors = [plt.cm.tab10(i/float(len(categories) - 1)) for i in range(len(categories))]

創建畫布

  • plt.figure()
  • 參數說明
    • figsize__畫布尺寸
    • dpi__分辨率
    • facecolor__背景顏色,默認為白色
    • edgecolor__邊框顏色,默認為白色

enumerate

  • enumerate() 函數用於將一個可遍歷的數據對象(如列表、元組或字符串)組合為一個索引序列,同時列出數據和數據下標,一般用在 for 循環當中。
  • 可用[*]打開惰性數據

繪制散點圖

  • plt.scatter()
  • 參數說明
    • x__橫坐標
    • y__縱坐標
    • s__數據尺寸大小
    • c__顏色
    • label__設置標簽名稱
    • edgecolor__標記的邊緣顏色
    • alpha__透明度
    • linewidth__線寬

plt.gca

  • plt.gca()獲得當前的對象子圖對象ax,如果沒有子圖對象,那一個么就創建新的子圖對象

np.c__

  • 按行連接兩個矩陣,但要求行數相等


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM