1. 程式人生 > 其它 >Matplotlib視覺化50圖:氣泡圖(2)

Matplotlib視覺化50圖:氣泡圖(2)

導讀

本文將學習如何使用 PythonMatplotlib 庫通過示例繪製氣泡圖。

簡介

氣泡圖是散點圖的改進版本。在散點圖中,有兩個維度 x 和 y。在氣泡圖中,存在三個維度 x、y 和 z。其中第三維 z 表示權重。這樣,氣泡圖比二維散點圖在視覺上提供了更多資訊。

資料準備

對於本教程,我將使用包含加拿大移民資訊的資料集。它擁有從 1980 年到 2013 年的資料,其中包括來自 195 個國家/地區的移民人數。匯入必要的包和資料集:

import numpy as np  
import pandas as pd 
df = pd.read_excel('https://s3-api.us-geo.objectstorage.softlayer.net/cf-courses-data/CognitiveClass/DV0101EN/labs/Data_Files/Canada.xlsx',
                       sheet_name='Canada by Citizenship',
                       skiprows=range(20),
                       skipfooter=2)

資料集太大。所以,我不能在這裡顯示完整截圖。讓我們看看列的名稱。

我們不會使用很多列。我只是刪除了這些列並將國家名稱(“OdName”)設定為索引。

df = df.drop(columns = ['Type', 'Coverage', 'AREA', 'AreaName',      'REG', 'RegName', 'DEV', 'DevName',]).set_index('OdName')
df.head()

我為這個練習選擇了愛爾蘭和巴西的資料。沒有特殊原因。我隨機選擇了它們。

Ireland = df.loc['Ireland']
Brazil = df.loc['Brazil']

歸一化

有幾種不同的方法可以歸一化資料。我們將資料歸一化以使資料處於相似的範圍內。愛爾蘭和巴西的移民資料有不同的範圍。我需要將它們調整到 0 到 1 的範圍內。我只是將愛爾蘭資料除以愛爾蘭資料系列的最大值。我對巴西的資料系列做了同樣的事情。

i_normal = Ireland / Ireland.max()
b_normal = Brazil / Brazil.max()

我們將根據年份繪製愛爾蘭和巴西的資料。將年份列在清單上會很有用。

years = list(range(1980, 2014))

視覺化

為了看看區別,讓我們先繪製散點圖。

import matplotlib.pyplot as plt
plt.figure(figsize=(14, 8))
plt.scatter(years, Ireland, color='blue')
plt.scatter(years, Brazil, color='orange')
plt.xlabel("Years", size=14)
plt.ylabel("Number of immigrants", size=14)
plt.show()

現在,繪製氣泡圖。我們必須輸入我們之前定義的尺寸。

plt.figure(figsize=(12, 8))
plt.scatter(years, Brazil, 
                  color='darkblue', 
                 alpha=0.5,
                 s = b_normal * 2000)
plt.scatter(years, Ireland, 
                  color='purple', 
                 alpha=0.5,
                 s = i_normal * 2000,
                 )
plt.xlabel("Years", size=14)
plt.ylabel("Number of immigrants", size=14)

我們可以通過氣泡的大小來了解移民的數量。氣泡越小,移民人數越少。

我們也可以讓結果更多彩多姿。為了讓它有點意義,我們需要對資料系列進行排序。您很快就會看到原因。

c_br = sorted(Brazil)
c_fr = sorted(France)

現在我們將傳遞這些值來改變顏色。

plt.figure(figsize=(12, 8))
plt.scatter(years, Brazil, 
                  c=c_br,
                 alpha=0.5,
                 s = b_normal * 2000)
plt.scatter(years, Ireland, 
                  c=c_fr,
                 alpha=0.5,
                 s = i_normal * 2000,
                 )
plt.xlabel("Years", size=14)
plt.ylabel("Number of immigrants", size=14)

現在我們添加了另一個維度,顏色。顏色隨移民數量變化。但是當我們繪製兩個變數時,它並沒有那麼好。因為在這個過程中我們沒有明確定義各個變數的顏色。但是當我們在 y 軸上繪製一個變數時,它做得很好。讓我們繪製每年來自巴西的移民人數,以瞭解多年來的趨勢。

plt.figure(figsize=(12, 8))
plt.scatter(years, Brazil, 
                  c=c_br,
                 alpha=0.5,
                 s = b_normal * 2000)
plt.xlabel("Years", size=14)
plt.ylabel("Number of immigrants of Brazil", size=14)

歡迎Star -> 學習目錄

更多教程 -> 學習目錄


本文由mdnice多平臺釋出