用ggplot2構造期待已久的雷達圖

之前一直苦惱於ggplot函數無法製作雷達圖,心想著既然餅圖可以通過柱形圖+極坐標模擬出來,為啥雷達圖不行。

我嘗試著用折線圖+極坐標來模擬雷達圖(之前在製作餅圖和圓環圖以及玫瑰圖的時候就是這樣做的)。

結果就粗線了以下不倫不類的圖形:

data<-data.frame(Name = c("蘋果","谷歌","臉書","亞馬遜","騰訊"),Company = c("Apple","Google","Facebook","Amozon","Tencent"),Sale2013 = c(5000,3500,2300,2100,3100),Sale2014 = c(5050,3800,2900,2500,3300),Sale2015 = c(5050,4000,3200,2800,3700),Sale2016 = c(6000,4800,4500,3500,4300))

mydata<melt(data,id.vars=c("Name","Company"),variable.name="Year",value.name="Sale")

ggplot(mydata,aes(Company,Sale,group=Year,color=Year))+geom_line()+coord_polar(theta = "x")

雖說效果已經很接近了,但是整體上還是無法達到雷達圖的要求,首尾線條沒有相連,點之間是通過弧線鏈接而非直線。

後來又是在瀏覽r語言論壇時,無意間看到一個圍繞ggplot2包開發的插件——ggradar,果不其然,是專門用於輔助ggplot2製作雷達圖而生的。

接下來我跟大家分享該插件的使用方法:

因為是開發版的,託管在github網站上,所以不能通過普通途徑下載,需要使用devtools工具:

install_github("ricardo-bion/ggradar")

library("ggplot2")

library("ggradar")

下面開始構造數據集:

mydata<-matrix(runif(40,0,1),5,8)

#以上構造了一個值區間為0~1,個數為40的5行8列隨機數矩陣。

rownames(mydata) <- LETTERS[1:5]

#以上使用前五個大寫字母為矩陣行命名;

colnames(mydata) <- c("Apple","Google","Facebook","Amozon","Tencent","Alibaba","Baidu","Twitter")

#使用以上文本向量為矩陣列命名;

mynewdata<-data.frame(mydata)

#將矩陣數據表格轉化為數據框格式作圖數據:

為數據框增加一列文本欄位:

Name<-c("USA","CHN","UK","RUS","JP")

mynewdata<-data.frame(Name,mynewdata)

ggradar(mynewdata[1,])

以上的圖表是默認樣式,ggradar函數對數據格式以及變數值範圍高度敏感,而卻不過多的依賴函數內的參數。

ggradar(mynewdata)

可以看出,ggradar函數支持多序列雷達圖,只是對它規定的數據結構很不能理解,為啥不是列代表分類,行代表軸變數呢,跟ggplot的語法還是有一些偏離,不過只要數據構造好之後,作圖函數的語法是相當簡練的。

EasyCharts團隊出品

帥的人都關注了EasyCharts團隊^..^~

QQ交流群:454614789

微信公眾號:EasyCharts

更多信息敬請查看: easychart.github.io/pos


推薦閱讀:

【R語言基礎】01.R語言軟體環境搭建及常用操作
Learn R | 機器學習中的人工神經網路(二)
knn到底咋回事?(修改版)
北京歷史天氣可視化

TAG:R编程语言 | ggplot2 | 数据可视化 |