Matplotlib視覺化50圖:氣泡圖(2)
導讀
本文將學習如何使用 Python
的 Matplotlib
庫通過示例繪製氣泡圖。
簡介
氣泡圖是散點圖的改進版本。在散點圖中,有兩個維度 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多平臺釋出