146 lines
4.9 KiB
R
146 lines
4.9 KiB
R
|
# Copyright (C) 1997-2009 The R Core Team
|
||
|
|
||
|
require(datasets)
|
||
|
require(grDevices); require(graphics)
|
||
|
|
||
|
## Here is some code which illustrates some of the differences between
|
||
|
## R and S graphics capabilities. Note that colors are generally specified
|
||
|
## by a character string name (taken from the X11 rgb.txt file) and that line
|
||
|
## textures are given similarly. The parameter "bg" sets the background
|
||
|
## parameter for the plot and there is also an "fg" parameter which sets
|
||
|
## the foreground color.
|
||
|
|
||
|
|
||
|
x <- stats::rnorm(50)
|
||
|
opar <- par(bg = "white")
|
||
|
plot(x, ann = FALSE, type = "n")
|
||
|
abline(h = 0, col = gray(.90))
|
||
|
lines(x, col = "green4", lty = "dotted")
|
||
|
points(x, bg = "limegreen", pch = 21)
|
||
|
title(main = "Simple Use of Color In a Plot",
|
||
|
xlab = "Just a Whisper of a Label",
|
||
|
col.main = "blue", col.lab = gray(.8),
|
||
|
cex.main = 1.2, cex.lab = 1.0, font.main = 4, font.lab = 3)
|
||
|
|
||
|
|
||
|
## A little color wheel. This code just plots equally spaced hues in
|
||
|
## a pie chart. If you have a cheap SVGA monitor (like me) you will
|
||
|
## probably find that numerically equispaced does not mean visually
|
||
|
## equispaced. On my display at home, these colors tend to cluster at
|
||
|
## the RGB primaries. On the other hand on the SGI Indy at work the
|
||
|
## effect is near perfect.
|
||
|
|
||
|
par(bg = "gray")
|
||
|
pie(rep(1,24), col = rainbow(24), radius = 0.9)
|
||
|
title(main = "A Sample Color Wheel", cex.main = 1.4, font.main = 3)
|
||
|
title(xlab = "(Use this as a test of monitor linearity)",
|
||
|
cex.lab = 0.8, font.lab = 3)
|
||
|
|
||
|
|
||
|
## We have already confessed to having these. This is just showing off X11
|
||
|
## color names (and the example (from the postscript manual) is pretty "cute".
|
||
|
|
||
|
pie.sales <- c(0.12, 0.3, 0.26, 0.16, 0.04, 0.12)
|
||
|
names(pie.sales) <- c("Blueberry", "Cherry",
|
||
|
"Apple", "Boston Cream", "Other", "Vanilla Cream")
|
||
|
pie(pie.sales,
|
||
|
col = c("purple","violetred1","green3","cornsilk","cyan","white"))
|
||
|
title(main = "January Pie Sales", cex.main = 1.8, font.main = 1)
|
||
|
title(xlab = "(Don't try this at home kids)", cex.lab = 0.8, font.lab = 3)
|
||
|
|
||
|
|
||
|
## Boxplots: I couldn't resist the capability for filling the "box".
|
||
|
## The use of color seems like a useful addition, it focuses attention
|
||
|
## on the central bulk of the data.
|
||
|
|
||
|
par(bg="cornsilk")
|
||
|
n <- 10
|
||
|
g <- gl(n, 100, n*100)
|
||
|
x <- rnorm(n*100) + sqrt(as.numeric(g))
|
||
|
boxplot(split(x,g), col="lavender", notch=TRUE)
|
||
|
title(main="Notched Boxplots", xlab="Group", font.main=4, font.lab=1)
|
||
|
|
||
|
|
||
|
## An example showing how to fill between curves.
|
||
|
|
||
|
par(bg="white")
|
||
|
n <- 100
|
||
|
x <- c(0,cumsum(rnorm(n)))
|
||
|
y <- c(0,cumsum(rnorm(n)))
|
||
|
xx <- c(0:n, n:0)
|
||
|
yy <- c(x, rev(y))
|
||
|
plot(xx, yy, type="n", xlab="Time", ylab="Distance")
|
||
|
polygon(xx, yy, col="gray")
|
||
|
title("Distance Between Brownian Motions")
|
||
|
|
||
|
|
||
|
## Colored plot margins, axis labels and titles. You do need to be
|
||
|
## careful with these kinds of effects. It's easy to go completely
|
||
|
## over the top and you can end up with your lunch all over the keyboard.
|
||
|
## On the other hand, my market research clients love it.
|
||
|
|
||
|
x <- c(0.00, 0.40, 0.86, 0.85, 0.69, 0.48, 0.54, 1.09, 1.11, 1.73, 2.05, 2.02)
|
||
|
par(bg="lightgray")
|
||
|
plot(x, type="n", axes=FALSE, ann=FALSE)
|
||
|
usr <- par("usr")
|
||
|
rect(usr[1], usr[3], usr[2], usr[4], col="cornsilk", border="black")
|
||
|
lines(x, col="blue")
|
||
|
points(x, pch=21, bg="lightcyan", cex=1.25)
|
||
|
axis(2, col.axis="blue", las=1)
|
||
|
axis(1, at=1:12, lab=month.abb, col.axis="blue")
|
||
|
box()
|
||
|
title(main= "The Level of Interest in R", font.main=4, col.main="red")
|
||
|
title(xlab= "1996", col.lab="red")
|
||
|
|
||
|
|
||
|
## A filled histogram, showing how to change the font used for the
|
||
|
## main title without changing the other annotation.
|
||
|
|
||
|
par(bg="cornsilk")
|
||
|
x <- rnorm(1000)
|
||
|
hist(x, xlim=range(-4, 4, x), col="lavender", main="")
|
||
|
title(main="1000 Normal Random Variates", font.main=3)
|
||
|
|
||
|
|
||
|
## A scatterplot matrix
|
||
|
## The good old Iris data (yet again)
|
||
|
|
||
|
pairs(iris[1:4], main="Edgar Anderson's Iris Data", font.main=4, pch=19)
|
||
|
pairs(iris[1:4], main="Edgar Anderson's Iris Data", pch=21,
|
||
|
bg = c("red", "green3", "blue")[unclass(iris$Species)])
|
||
|
|
||
|
|
||
|
## Contour plotting
|
||
|
## This produces a topographic map of one of Auckland's many volcanic "peaks".
|
||
|
|
||
|
x <- 10*1:nrow(volcano)
|
||
|
y <- 10*1:ncol(volcano)
|
||
|
lev <- pretty(range(volcano), 10)
|
||
|
par(bg = "lightcyan")
|
||
|
pin <- par("pin")
|
||
|
xdelta <- diff(range(x))
|
||
|
ydelta <- diff(range(y))
|
||
|
xscale <- pin[1]/xdelta
|
||
|
yscale <- pin[2]/ydelta
|
||
|
scale <- min(xscale, yscale)
|
||
|
xadd <- 0.5*(pin[1]/scale - xdelta)
|
||
|
yadd <- 0.5*(pin[2]/scale - ydelta)
|
||
|
plot(numeric(0), numeric(0),
|
||
|
xlim = range(x)+c(-1,1)*xadd, ylim = range(y)+c(-1,1)*yadd,
|
||
|
type = "n", ann = FALSE)
|
||
|
usr <- par("usr")
|
||
|
rect(usr[1], usr[3], usr[2], usr[4], col="green3")
|
||
|
contour(x, y, volcano, levels = lev, col="yellow", lty="solid", add=TRUE)
|
||
|
box()
|
||
|
title("A Topographic Map of Maunga Whau", font= 4)
|
||
|
title(xlab = "Meters North", ylab = "Meters West", font= 3)
|
||
|
mtext("10 Meter Contour Spacing", side=3, line=0.35, outer=FALSE,
|
||
|
at = mean(par("usr")[1:2]), cex=0.7, font=3)
|
||
|
|
||
|
## Conditioning plots
|
||
|
|
||
|
par(bg="cornsilk")
|
||
|
coplot(lat ~ long | depth, data = quakes, pch = 21, bg = "green3")
|
||
|
|
||
|
par(opar)
|