【matplotlib 實戰】--雷達圖

wang_yb發表於2023-10-27

雷達圖(Radar Chart),也被稱為蛛網圖或星型圖,是一種用於視覺化多個變數之間關係的圖表形式。
雷達圖是一種顯示多變數資料的圖形方法。通常從同一中心點開始等角度間隔地射出三個以上的軸,每個軸代表一個定量變數,各軸上的點依次連線成線或幾何圖形。

雷達圖可以用來在變數間進行對比,或者檢視變數中有沒有異常值。
雷達圖中每個軸的相對位置和角度通常是無資訊的。每個變數都具有自己的軸,彼此間的距離相等,所有軸都有相同的刻度。
在將資料對映到這些軸上時,需要注意預先對數值進行標準化處理,保證各個軸之間的數值比例能夠做同級別的比較。

1. 主要元素

雷達圖的主要元素包括:

  1. 座標軸:每個變數對應一個射線或軸線,從中心點向外延伸。射線的長度或角度表示該變數的值大小或比例。
  2. 資料點:在每個射線上,根據變數的值確定相應的資料點或標記點的位置。
  3. 雷達鏈:連線各個資料點或標記點形成的多邊形或區域,用於表示多個變數之間的關係。
  4. 區域範圍:雷達鏈所連線的區域,面積大小代表各個資料綜合的結果。

2. 適用的場景

雷達圖適用的分析場景包括:

  • 比較綜合表現:比較多個實體(如產品、團隊、個人等)在多個指標上的表現,幫助決策者瞭解它們之間的差異和相對優劣。
  • 評估績效和目標:幫助評估績效和目標達成情況,從而指導後續決策和改進措施。
  • 變數之間的關係趨勢:直觀地發現多個變數之間的關係和趨勢,例如某個變數的增長是否會導致其他變數的變化。
  • 強調優勢和劣勢:凸顯實體在某些指標上的優勢和劣勢,有助於決策者更好地瞭解實體的特點和優勢所在。

3. 不適用的場景

雷達圖不適用的分析場景有:

  • 無序資料:如果資料是無序的,無法明確確定各個變數之間的相對位置和關係,雷達圖的效果會大打折扣。
  • 資料缺失:如果某些變數的資料缺失或不完整,將導致雷達圖無法準確地展示各個變數之間的關係和差異。
  • 多個並行路徑:當存在多個並行路徑時,例如多個團隊或產品之間的比較,雷達圖可能無法清晰地展示它們之間的差異和相對優劣。

4. 分析實戰

本次透過雷達圖來分析下王者榮耀KPL聯盟幾位選手的比賽資料。

4.1. 資料來源

資料來自王者榮耀官網(2023年春季賽資料),整理好的資料可以從下面下載:
https://databook.top/wzry/2023-spring

使用其中的檔案:player-2023春季賽.csv

fp = "d:/share/data/player-2023春季賽.csv"

df = pd.read_csv(fp)
df

4.2. 資料清理

選手的資料一共有125條,本來想按勝率選擇最高的4位選手,發現勝率高的選手很多隻參加了1,2場比賽。
所以選擇參加比賽最多6位選手來分析。

data = df.sort_values("比賽場次", ascending=False)
data = data.iloc[:6]
data

選擇每位選手下列5個屬性來繪製雷達圖:

  1. 經濟佔比
  2. 傷害佔比
  3. 承傷佔比
  4. 推塔佔比
  5. 參團率
filter_cols = ["選手", "經濟佔比", "傷害佔比", "承傷佔比", "推塔佔比", "參團率"]
data = data.loc[:, filter_cols]
data

image.png

將百分比資料轉為數值型別:

for col in filter_cols[1:]:
    data[col] = data[col].str.replace("%", "", regex=False)
    data[col] = data[col].astype("float")

data

image.png

4.3. 分析結果視覺化

繪製6位選手的雷達圖:

N = 5 # 雷達圖屬性個數
angles = np.linspace(0, 2 * np.pi, N, endpoint=False)
angles = np.concatenate((angles, [angles[0]]))

fig = plt.figure(figsize=[10, 6])
for i in range(len(data)):
    values = data.iloc[i, 1:].tolist()
    values.append(values[0])

    position = "23" + str(i + 1)
    ax = fig.add_subplot(int(position), polar=True)
    ax.plot(angles, values, "o-")
    ax.fill(angles, values, alpha=0.4)
    ax.set_thetagrids(angles[:-1] * 180 / np.pi,
                      data.columns[1:].tolist())
    ax.set_title(data.iloc[i, 0], color="b")
    ax.set_ylim(0, 100)

plt.subplots_adjust(hspace=0.5)

image.png

參賽最多的6位選手,5位都是佛山DRG的隊員,說明他們的首發陣容很穩定。
5個屬性連線起來的面積,看起來還是射手打野的比較大,C位果然還是得看這兩個位置。

相關文章