trim <- function (x) gsub("^\\s+|\\s+$", "", x)
reorder <- function(d, wts) stats::reorder(d, wts, agglo.FUN = mean)
dist <- function(q) {
nc <- nrow(q)
qm<- as.matrix(q)
d <- matrix(NA, ncol=nc, nrow=nc)
for (i in 1:nc) d[i,] <- apply(abs(sweep(qm, 2, qm[i,])), 1, median, na.rm=T)
rownames(d) <- colnames(d) <- rownames(q)
print(d)
as.dist(d)
}
library("foreign")
library("RColorBrewer")
library("gplots")
library("countrycode")
x <- read.spss("gov_10dd_edpt1.sav", to.data.frame=T)
x$value[x$value==": "] <- NA
quote <- data.frame(COUNTRY=trim(x$GEO), YEAR=as.numeric(as.character(x$TIME)), RATIO=as.numeric(as.character(x$value)))
quote <- reshape(quote, idvar="COUNTRY", timevar="YEAR", direction = "wide")
# 170110: select only entries with two letter country code
ccountry <- as.character(quote$COUNTRY)
scountry <- (nchar(ccountry)==2)
# 170110: replace Greece and United Kingdom
nq <- countrycode(ccountry[scountry], "iso2c", "country.name")
nq[which(ccountry[scountry]=="EL")] <- "Greece"
nq[which(ccountry[scountry]=="UK")] <- "United Kingdom"
quote <- quote[scountry,-1]
rownames(quote) <- nq
colnames(quote) <- as.character(1994+seq(ncol(quote)))
colfun <- rev(brewer.pal(11, "Spectral"))
note <- apply(as.matrix(quote), c(1,2), function(elem) { if (is.na(elem)) return(""); sprintf("%.0f%%", elem) })
svg("gdp_to_debt_ratio.svg", width=20, height=16)
par(cex.main=2)
heatmap.2(as.matrix(quote), scale="none", col=colfun, margins=c(7,14),
Colv=NA, distfun=dist, reorderfun=reorder,
tracecol=NA,
main="Debt-to-GDP ratio for some\neuropean countries", cexRow=2, cexCol=2,
cellnote=note, notecol="black", notecex=1.6,
key.title="Color key", key.ylab="", key.xlab="", key.par=list(mar=c(3,1,2,0)),
keysize=0.5)
dev.off()