雷達圖又稱為蛛網圖或極坐標圖,是電腦遊戲中最常見的圖,通常用來表示角色的能力值。雷達圖可以安裝fmsb套件用radarchart()來繪製。
雷達圖
雖然fmsb套件有radarchart()可以繪製雷達圖,但在R繪製雷達圖其實是件不容易的事。radarchart()預設只接受dataframe格式,因此必須先把資料做整理與轉換。這裡以三國志14的資料為例,介紹如何在R的環境中畫出雷達圖。
radarchart()在使用上有幾點限制:
- 所有要繪製的資料,只能存放在資料集(dataframe)。
- 資料集的第一列必須包含每個變數的最大值。
- 資料集的第二列必須包含每個變數的最小值。
- 真正要繪製的個案要從第三列開始。
- 雷達圖的構面至少要>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"))
雷達圖重要參數
我們可以發現經過參數設定後的雷達圖,與原始雷達圖差異甚大。為了避免雷達圖過於簡陋,無法符合需求,這裡列出radarchart()幾個重要參數。
- 多邊形區域
- pcol:設定線條顏色。
- pfcol:設定填充顏色。
- plwd:設定線條寬度。
- plty:設定線條類型。
- pty:設定連接點的類型。
- 網格區域
- cglcol:設定線條顏色。
- cglwd:設定線條寬度。
- cglty:設定線條類型。
- 座標軸
- axistype:設定軸的類型,共有0-5種類型,通常選擇1中央軸標籤。預設值為0不顯示軸標籤。
- caxislabels:設定中央軸線的刻度圖例。
- axislabcol: 設定中央軸線的刻度顏色。
- calcex: 設定中央軸線的刻度字型大小。