# R in Action (2nd ed): Chapter 11 # Intermediate graphs # requires packages car, scatterplot3d, gclus, hexbin, IDPmisc, Hmisc, # corrgram, vcd, rlg, Rcmdr to be installed # install.packages(c("car", "scatterplot3d", "gclus", "hexbin", "IDPmisc", "Hmisc", "corrgram", "vcd", "rld", "Rcmdr")) #------------------------------------------------------------------------------------ par(ask=TRUE) opar <- par(no.readonly=TRUE) # record current settings # A scatterplot with best fit lines attach(mtcars) plot(wt, mpg, main="Basic Scatterplot of MPG vs. Weight", xlab="Car Weight (lbs/1000)", ylab="Miles Per Gallon ", pch=19) abline(lm(mpg ~ wt), col="red", lwd=2, lty=1) lines(lowess(wt, mpg), col="blue", lwd=2, lty=2) library(car) scatterplot(mpg ~ wt | cyl, data=mtcars, lwd=2, main="Scatter Plot of MPG vs. Weight by # Cylinders", xlab="Weight of Car (lbs/1000)", ylab="Miles Per Gallon", id.method="identify", legend.plot=TRUE, labels=row.names(mtcars), boxplots="xy") # scatterplot matrices pairs(~ mpg + disp + drat + wt, data=mtcars, main="Basic Scatterplot Matrix") library(car) scatterplotMatrix(~ mpg + disp + drat + wt, data=mtcars, spread=FALSE, lty.smooth=2, main="Scatterplot Matrix via car package") scatterplotMatrix(~ mpg + disp + drat + wt | cyl, data=mtcars, spread=FALSE, main="Scatterplot Matrix via car package", diagonal="histogram") cor(mtcars[c("mpg", "wt", "disp", "drat")]) library(gclus) mydata <- mtcars[c(1,3,5,6)] mydata.corr <- abs(cor(mydata)) mycolors <- dmat.color(mydata.corr) myorder <- order.single(mydata.corr) cpairs(mydata, myorder, panel.colors=mycolors, gap=.5, main="Variables Ordered and Colored by Correlation" ) # high density scatterplots set.seed(1234) n <- 10000 c1 <- matrix(rnorm(n, mean=0, sd=.5), ncol=2) c2 <- matrix(rnorm(n, mean=3, sd=2), ncol=2) mydata <- rbind(c1, c2) mydata <- as.data.frame(mydata) names(mydata) <- c("x", "y") with(mydata, plot(x, y, pch=19, main="Scatter Plot with 10000 Observations")) with(mydata, smoothScatter(x, y, main="Scatterplot colored by Smoothed Densities")) library(hexbin) with(mydata, { bin <- hexbin(x, y, xbins=50) plot(bin, main="Hexagonal Binning with 10,000 Observations") }) library(IDPmisc) with(mydata, iplot(x, y, main="Image Scatter Plot with Color Indicating Density")) par(opar) # 3-D Scatterplots library(scatterplot3d) attach(mtcars) scatterplot3d(wt, disp, mpg, main="Basic 3D Scatterplot") scatterplot3d(wt, disp, mpg, pch=16, highlight.3d=TRUE, type="h", main="3D Scatterplot with Vertical Lines") s3d <-scatterplot3d(wt, disp, mpg, pch=16, highlight.3d=TRUE, type="h", main="3D Scatter Plot with Verical Lines and Regression Plane") fit <- lm(mpg ~ wt+disp) s3d$plane3d(fit) detach(mtcars) # spinning 3D plot library(rgl) attach(mtcars) plot3d(wt, disp, mpg, col="red", size=5) # alternative rgl.open() library(Rcmdr) attach(mtcars) scatter3d(wt, disp, mpg) # bubble plots attach(mtcars) r <- sqrt(disp/pi) symbols(wt, mpg, r, inches=0.30, fg="white", bg="lightblue", main="Bubble Plot with point size proportional to displacement", ylab="Miles Per Gallon", xlab="Weight of Car (lbs/1000)") text(wt, mpg, rownames(mtcars), cex=0.6) detach(mtcars) par(opar) # Creating side by side scatter and line plots par(mfrow=c(1,2)) t1 <- subset(Orange, Tree==1) plot(t1$age, t1$circumference, xlab="Age (days)", ylab="Circumference (mm)", main="Orange Tree 1 Growth") plot(t1$age, t1$circumference, xlab="Age (days)", ylab="Circumference (mm)", main="Orange Tree 1 Growth", type="b") par(opar) # Line chart displaying the growth of 5 Orange trees over time Orange$Tree <- as.numeric(Orange$Tree) ntrees <- max(Orange$Tree) xrange <- range(Orange$age) yrange <- range(Orange$circumference) plot(xrange, yrange, type="n", xlab="Age (days)", ylab="Circumference (mm)" ) colors <- rainbow(ntrees) linetype <- c(1:ntrees) plotchar <- seq(18, 18+ntrees, 1) for (i in 1:ntrees) { tree <- subset(Orange, Tree==i) lines(tree$age, tree$circumference, type="b", lwd=2, lty=linetype[i], col=colors[i], pch=plotchar[i] ) } title("Tree Growth", "example of line plot") legend(xrange[1], yrange[2], 1:ntrees, cex=0.8, col=colors, pch=plotchar, lty=linetype, title="Tree" ) # Correlograms options(digits=2) cor(mtcars) library(corrgram) corrgram(mtcars, order=TRUE, lower.panel=panel.shade, upper.panel=panel.pie, text.panel=panel.txt, main="Correlogram of mtcar intercorrelations") corrgram(mtcars, order=TRUE, lower.panel=panel.ellipse, upper.panel=panel.pts, text.panel=panel.txt, diag.panel=panel.minmax, main="Correlogram of mtcar data using scatterplots and ellipses") corrgram(mtcars, lower.panel=panel.shade, upper.panel=NULL, text.panel=panel.txt, main="Car Mileage Data (unsorted)") col.corrgram <- function(ncol){ colorRampPalette(c("darkgoldenrod4", "burlywood1", "darkkhaki", "darkgreen"))(ncol)} corrgram(mtcars, order=TRUE, lower.panel=panel.shade, upper.panel=panel.pie, text.panel=panel.txt, main="A Corrgram (or Horse) of a Different Color") # Mosaic Plots ftable(Titanic) library(vcd) mosaic(Titanic, shade=TRUE, legend=TRUE) # type= options in the plot() and lines() functions x <- c(1:5) y <- c(1:5) par(mfrow=c(2,4)) types <- c("p", "l", "o", "b", "c", "s", "S", "h") for (i in types){ plottitle <- paste("type=", i) plot(x,y,type=i, col="red", lwd=2, cex=1, main=plottitle) }