radarchart() in 'fmsb' package offer a plotting function that draws radar/spider chart, similar to stars() in base package.
library(fmsb)
'zoo' package converts date values to year-month values.
library(zoo)
dat<-as.data.frame(sunspot.month)
dat$TS<-seq(as.yearmon("1749-01-01"), as.yearmon("2013-09-01"), by = 1/12)
colnames(dat)[1] <- "sunspot"
The decades and centuries were derived from the year-month field to be used for grouping variables as below.
dat$decade <- floor(as.numeric(format(dat$TS, "%Y"))/10)*10
dat$century <- floor(as.numeric(format(dat$TS, "%Y"))/100)*100
dat$month <- format(dat$TS, "%b")
dat$month <- factor(dat$month, levels = unique(dat$month))
I used 'reshape2' package to rearrange the data to the desired structure while doing the aggregation to obtain mean values.
library(reshape2)
agg <- recast(data = dat,century~month, measure.var = "sunspot", mean)
radarchart() requires the input data to have the max value and min value in the first and second rows respectively.
MX <- c(NA, rep(max(agg[,-1]), ncol(agg)-1))
MN <- c(NA, rep(min(agg[,-1]), ncol(agg)-1))
agg <- rbind(MX, MN, agg)
To draw a radar chart:
radarchart(agg[,-1])
To assign colours for different groups and to insert a legend:
COL<-colorRampPalette(c("red", "blue"))(nrow(agg)-2)
radarchart(agg[,-1], pcol = COL)
legend(2, 1, legend = levels(as.factor(agg$century)), title = "century", col = COL, seg.len = 2, border = "transparent", pch = 16, lty = 1)
To change the line colour in the background:
radarchart(agg[,-1], pcol = COL, cglcol = "grey80")
legend(2, 1, legend = levels(as.factor(agg$century)), title = "century", col = COL, seg.len = 2, border = "transparent", pch = 16, lty = 1)
To modify number of layers in the background (in this example from 5 to 10):
radarchart(agg[,-1], pcol = COL, cglcol = "grey80", seg = 10)
legend(2, 1, legend = levels(as.factor(agg$century)), title = "century", col = COL, seg.len = 2, border = "transparent", pch = 16, lty = 1)
To add a title:
radarchart(agg[,-1], pcol = COL, cglcol = "grey80", seg = 10, title = "sun spots")
legend(2, 1, legend = levels(as.factor(agg$century)), title = "century", col = COL, seg.len = 2, border = "transparent", pch = 16, lty = 1)
To split the groups in to individual radar chart:
par(mfrow = c(2, 2))
for(i in 3:nrow(agg)){
radarchart(agg[c(1,2,i), -1], pcol = COL[i-2], cglcol = "grey80", seg = 10, title = paste("Century:", agg$century[i], sep=" "))
}
To colour the regions/polygons of the above graphs:
par(mfrow=c(2, 2))
for(i in 3:nrow(agg)){
radarchart(agg[c(1, 2, i), -1], pcol = COL[i-2], cglcol = "grey80", seg = 10, title = paste("Century:", agg$century[i], sep=" "), pdensity = 20, pangle = 30, pfcol = COL[i-2])
}
thanks a lot for the information :-) very useful
ReplyDelete