In this lab, we will go step-by-step through points that are necessary to create some nice-looking plots.
First, we will produce some random data that we will later plot. Make a data frame with
First, look at the defaults:
#20 random datapoints x <- sample(c(1:25), size=20, replace=T) y <- rnorm(n=20, mean=0, sd=1) # sample from normal r <- rnorm(n=20, mean=0, sd=1) # radius from normal names <- paste("ind", 1:20, sep="") # assign some names data <- data.frame(cbind(X=x,Y=y, R=r), row.names=names) plot(data[,1:2])
As you see, the points are displayed in a simple way, axes are set automatically, the radius is not reflected on the plot in any way (3rd dimension).
plot(data[,1:2], type='n')
plot(data[,1:2], type='n',xaxt='n', yaxt='n', xlab="", ylab="", frame.plot=F)
</pre>
</details>
#Create X axis coords.x <- seq(min(data$X),max(data$X), by=1) axis(side=1, # 1-left, 2-top, 3-right, 4-bottom at=coords.x, # coordinates for tickmarks cex.axis=.7 # make labels smaller ) #Create Y axis #we want 10 tickmarks along the data range coords.y <- seq(min(data$Y), max(data$Y), length.out=10) #and our labels will be the rounded values of y labels.y <- round(coords.y, digits=2) axis(side=2, at=coords.y, labels=labels.y, # we want specific labels las=2 # turn the text so it is parallel to OX )
abline(v=coords.x, col="darkgrey", lty=3) abline(h=coords.y, col="darkgrey", lty=3) #you could also use grid()
#Function for adding transparency to a given color. mycol <- function(colname="olivedrab", transparency=.5) { #convert color name to its RGB value and add the desired #transparency color <- c(as.vector(col2rgb(colname))/255, transparency) # and make a new color from the above color <- rgb(color[1], color[2], color[3], color[4]) return(color) }
#Plot radii points(data[data$X%%2 == 0,], pch=19, cex=exp(r), col=mycol("slateblue", .5)) points(data[data$X%%2 != 0,], pch=15, cex=exp(r), col=mycol("grey", .5))
points(data[data$X%%2 == 0,], pch=3, cex=1, col="darkgrey") points(data[data$X%%2 != 0,], pch=3, cex=1, col="red")
center.x <- mean(range(data[,1])) center.y <- mean(range(data[,2])) text(x=center.x, y=center.y, "Center", col="lightgrey")
title("Odds and Ends") mtext("Y", side=2, line=3, cex.lab=1,las=2, col="blue") mtext("X", side=1, line=3, cex.lab=1,las=1, col="blue")
legend('topright', legend=c("odd", "even"), col=c(mycol("slateblue", .5), mycol("grey", .5)), pch=c(19,15), cex=1, pt.cex=1.2, title="Legend", bty='n' )
A female child was measured at the following dates:
‘30-09-2015’, ‘12-10-2015’, ‘19-10-2015’, ‘26-10-2015’, ‘07-11-2015’, ‘16-11-2015’, ‘30-11-2015’, ‘11-01-2016’, ‘08-02-2016’, ‘14-03-2016’, ‘05-04-2016’, ‘14-04-2016’, ‘31-05-2016’, ‘14-07-2016’,
Your task is to plot these data on the WHO centile grids. Choose weight/length/circumference depending on the month you was born:
Good luck!
library(lubridate) timepoints <- dmy(c('30-09-2015', '12-10-2015', '19-10-2015', '26-10-2015', '07-11-2015', '16-11-2015', '30-11-2015', '11-01-2016', '08-02-2016', '14-03-2016', '05-04-2016', '14-04-2016', '31-05-2016', '14-07-2016'))
weight <- c(3300, 3540, 3895, 4070, 4230, 4385, 4855, 5865, NA, 6736, 7065, 7080, 7530, 7640) length <- c(43,NA,53,54,55,56,58,62.5,65,67,67.5,67.5,70.5,71.5) head <- c(34,35.5,36.1,36.8,36.8,37.3,38,40.2,41.4,42.1,NA,43,44,45)
who.month <- 30.4375 #days xpoints <- as.duration(timepoints[1] %--% timepoints) / ddays(1) / who.month
go to WHO website (http://www.who.int/childgrowth/standards/en/) and find out the link to the dataset of your concern, e.g. Weight for age, percentiles for girls have the following address: http://www.who.int/entity/childgrowth/standards/tab_wfa_girls_p_0_5.txt
uri <- "http://www.who.int/entity/childgrowth/standards/tab_wfa_girls_p_0_5.txt" #uri <- "http://www.who.int/entity/childgrowth/standards/second_set/tab_hcfa_girls_p_0_5.txt" #uri <- "http://www.who.int/entity/childgrowth/standards/tab_lhfa_girls_p_0_2.txt" myData <-read.table(uri, header=T, sep='\t')
plot(1, xlim=c(0, max(myData$Month)), type='n', bty='n', ylim=c(0, max(myData[,c(5:19)])), las=1, xlab='Month', ylab='kg', cex.axis=.7) grid()
lines(myData$M, col='grey', lty=1) lines(myData$P25, col='blue', lty=2) lines(myData$P75, col='blue', lty=2) lines(myData$P01, col='tomato', lty=2) lines(myData$P999, col='tomato', lty=2)
points(xpoints, weight/1000, pch=3, type='l', cex=.5) points(xpoints, weight/1000, pch=3, type='p', cex=.5)
mtext(text = c('P0.1','P25','P75','P99.9'), side = 4, at=myData[dim(myData)[1], c('P01','P25','P75','P999')], las=1, cex=.5)
You task here is to use the already acquired R knowledge to plot an interesting relationship between two freely selected variables available at Hans Rosling’s Gapminder Foundation page.