lecture
website icon
統計繪圖
簡介 直方圖 密度圖 長條圖 折線圖 圓餅圖 散布圖 箱型圖 雷達圖 動畫
×
website icon 資料管理 統計分析 相關資源 巨人肩膀 語法索引 關於作者

簡介

本部分介紹雷達圖,使用到的指令包含:

Facebook Icon Twitter Icon LinkedIn Icon LINE Icon

雷達圖又稱為蛛網圖或極坐標圖,是電腦遊戲中最常見的圖,通常用來表示角色的能力值。雷達圖可以安裝fmsb套件用radarchart()來繪製。

雷達圖

雖然fmsb套件有radarchart()可以繪製雷達圖,但在R繪製雷達圖其實是件不容易的事。radarchart()預設只接受dataframe格式,因此必須先把資料做整理與轉換。這裡以三國志14的資料為例,介紹如何在R的環境中畫出雷達圖。

radarchart()在使用上有幾點限制:

  1. 所有要繪製的資料,只能存放在資料集(dataframe)。
  2. 資料集的第一列必須包含每個變數的最大值。
  3. 資料集的第二列必須包含每個變數的最小值。
  4. 真正要繪製的個案要從第三列開始。
  5. 雷達圖的構面至少要>2,因此變數至少要>2個

由上,至少必須是一個\(3 \times 2\)的資料集,才符合radarchart()的標準,否則無法畫出雷達圖。我們現在就以這個標準來準備資料,為了讓畫出來的雷達圖能清楚顯現,我們挑選三位能力有明顯差異的角色分別是于禁、周泰、法正。

> library(dplyr)
> library(fmsb)
> threekingdoms<-read.csv("c:/Users/WunYan/Downloads/threekingdoms.csv", header=T, sep=",")
> data<- threekingdoms %>% filter(角色="于禁" | 角色="周泰" | 角色="法正")
> data<-data.frame(data, row.names=data$角色)
> data<- data %>% select(-角色, -國家)

接下來替資料集增加最大與最小值。

> max_min<-data.frame(統率=c(100,0),武力=c(100,0),智力=c(100,0),政治=c(100,0),魅力=c(100,0))
> rownames(max_min)<-c("最高", "最低")
> data<-rbind(max_min, data)

整理完的資料如下:

> data
     統率 武力 智力 政治 魅力
最高  100  100  100  100  100
最低    0    0    0    0    0
于禁   84   77   72   57   56
周泰   77   91   48   38   60
法正   82   47   94   78   57

大功告成後,可以開始繪製雷達圖。先用par()與mar()設定圖形輸出的邊界,讓輸出後的雷達圖範圍能大一些,接著設定雷達圖的參數包含外框、網線等,最後再加上圖例。

> par(mar=c(t=1, r=2, b=2, l=1))
> radarchart(
+ data, axistype=1,
+ plty=1, plwd=2, pcol=c(rgb(0.2,0.5,0.5,0.9),rgb(0.9,0.5,0.5,0.9),rgb(0.9,0.7,0,0.9)),
+ pfcol=c(rgb(0.2,0.5,0.5,0.3), rgb(0.9,0.5,0.5,0.3), rgb(0.9,0.7,0,0.3)),
+ cglcol="grey", cglty=1, cglwd=0.8, caxislabels=seq(20,100,20)
> )
> legend("bottom", horiz=T, bty="n", pch=16, legend=c("于禁","周泰","法正"), col=c(rgb(0.2,0.5,0.5,0.9),rgb(0.9,0.5,0.5,0.9),rgb(0.9,0.7,0,0.9))

我們可以比較不經參數設定直接繪製的雷達圖,以及調整參數後的雷達圖的樣貌。

> par(mar=c(1, 2, 2, 1))
> radarchart(data)
> legend("bottom", horiz=T, bty="n", legend=c("于禁","周泰","法正"), lty=c("dashed","longdash","dotted"), lwd=2, col=c("black","maroon","green"))
R Base原始雷達圖 R Base彩色雷達圖

雷達圖重要參數

我們可以發現經過參數設定後的雷達圖,與原始雷達圖差異甚大。為了避免雷達圖過於簡陋,無法符合需求,這裡列出radarchart()幾個重要參數。