Notes on Graphics Functions
It is important to understand the distinction between high-level and low-level graphics functions. //A high-level// graphics function //starts a new graph//. It initializes the graphics window (creating it if necessary); sets the scale; maybe draws some adornments, such as a title and labels; and renders the graphic. Examples include:
plot
* Generic plotting function
boxplot
* Create a box plot
hist
* Create a histogram
qqnorm
* Create a quantile-quantile (Q-Q) plot
curve
* Graph a function
A low-level graphics function cannot start a new graph. Rather, it //adds something to an existing graph//: points, lines, text, adornments, and so forth. Examples include:
points
* Add points
lines
* Add lines
abline
* Add a straight line
segments
* Add line segments
polygon
* Add a closed polygon
text
* Add text
You must call a high-level graphics routine before calling a low-level graphics routine. The low-level routine needs to have the graph initialized; otherwise, you get an error like this:
> abline(a=0, b=1)
Error in int_abline(a = a, b = b, h = h, v = v, untf = untf, ...) :
plot.new has not been called yet
plot(x) produces **different results depending on whether x is** a vector, a factor, a data frame, a linear regression model, a table, or whatever.
====== Creating a Scatter Plot ======
Scatter Plot (number by number data)
> cars
speed dist
1 4 2
2 4 10
3 7 4
4 7 22
5 8 16
6 9 10
7 10 18
8 10 26
9 10 34
10 11 17
11 11 28
12 12 14
13 12 20
14 12 24
15 12 28
16 13 26
17 13 34
18 13 34
19 13 46
20 14 26
21 14 36
22 14 60
23 14 80
24 15 20
25 15 26
26 15 54
27 16 32
28 16 40
29 17 32
30 17 40
31 17 50
32 18 42
33 18 56
34 18 76
35 18 84
36 19 36
37 19 46
38 19 68
39 20 32
40 20 48
41 20 52
42 20 56
43 20 64
44 22 66
45 23 54
46 24 70
47 24 92
48 24 93
49 24 120
50 25 85
>
The same thig . . .
> plot(cars)
> plot(cars$speed, cars$dist)
{{:r:scatterplot01.png?600}}
====== Adding a Title and Labels ======
When calling plot:
* Use the **main** argument for a title.
* Use the **xlab** argument for an x-axis label.
* Use the **ylab** argument for a y-axis label.
> plot(x, main="The Title", xlab="X-axis Label", ylab="Y-axis Label")
plot(cars,
main="cars: Speed vs. Stopping Distance (1920)",
xlab="Speed (MPH)",
ylab="Stopping Distance (ft)")
====== Adding a Grid ======
* Call plot with type="n" to initialize the graphics frame without displaying the data.
* Call the grid function to draw the grid.
* Call low-level graphics functions, such as points and lines, to draw the graphics overlaid on the grid.
> plot(x, y, type="n")
> grid()
> points(x, y)
plot(cars,
main="cars: Speed vs. Stopping Distance (1920)",
xlab="Speed (MPH)",
ylab="Stopping Distance (ft)", type="n")
grid()
points(cars)
{{:r:scatterplot02.png?600}}
====== Creating a Scatter Plot of Multiple Groups ======
with(iris, plot(Petal.Length, Petal.Width))
with(iris, plot(Petal.Length, Petal.Width, pch=as.integer(Species)))
====== Adding a Legend ======
Here is how you create legends for points, lines, and colors:
Legend for points
* legend(x, y, labels, pch=c(pointtype1, pointtype2, ...))
Legend for lines according to line type
* legend(x, y, labels, lty=c(linetype1, linetype2, ...))
Legend for lines according to line width
* legend(x, y, labels, lwd=c(width1, width2, ...))
Legend for colors
* legend(x, y, labels, col=c(color1, color2, ...))
- x and y are the coordinates of the legend box.
- labels is a vector of the character strings to appear in the legend.
- The pch, lty, lwd, and col arguments are vectors that parallel the labels.
> legend(1.5, 2.4, c("setosa","versicolor","virginica"), pch=1:3)
> legend(1, 2.5, c("setosa","versicolor","virginica"), pch=1:3, col="red")
> f <- factor(iris$Species)
> with(iris, plot(Petal.Length, Petal.Width, pch=as.integer(f)))
> legend(1.5, 2.4, as.character(levels(f)),
pch=1:length(levels(f)),
col=c("red","blue","green"))
====== Plotting the Regression Line of a Scatter Plot ======
> install.packages("faraway")
> library(faraway)
>
> data(strongx)
> strongx
momentum energy crossx sd
1 4 0.345 367 17
2 6 0.287 311 9
3 8 0.251 295 9
4 10 0.225 268 7
5 12 0.207 253 7
6 15 0.186 239 6
7 20 0.161 220 6
8 30 0.132 213 6
9 75 0.084 193 5
10 150 0.060 192 5
> m <- lm(crossx ~ energy, data=strongx) # get linear regression model
> plot(crossx ~ energy, data=strongx)
> abline(m)
===== e.g. 1 =====
# Creating a Graph
attach(mtcars)
plot(wt, mpg)
abline(lm(mpg~wt))
title("Regression of MPG on Weight")
{{:R:regression_line.png}}
===== e.g. 2 =====
?LifeCycleSavings
lm.SR <- lm(sr ~ pop15 + pop75 + dpi + ddpi, data = LifeCycleSavings)
> summary(lm.SR)
Call:
lm(formula = sr ~ pop15 + pop75 + dpi + ddpi, data = LifeCycleSavings)
Residuals:
Min 1Q Median 3Q Max
-8.2422 -2.6857 -0.2488 2.4280 9.7509
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 28.5660865 7.3545161 3.884 0.000334 ***
pop15 -0.4611931 0.1446422 -3.189 0.002603 **
pop75 -1.6914977 1.0835989 -1.561 0.125530
dpi -0.0003369 0.0009311 -0.362 0.719173
ddpi 0.4096949 0.1961971 2.088 0.042471 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 3.803 on 45 degrees of freedom
Multiple R-squared: 0.3385, Adjusted R-squared: 0.2797
F-statistic: 5.756 on 4 and 45 DF, p-value: 0.0007904
> plot(LifeCycleSavings)
> plot(lm.SR)
{{:r:LifeCycleSavings.jpeg}}
{{:R:regression_model.png}}
====== Plotting All Variables Against All Other Variables ======
> head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
plot(iris[,1:4])
{{:R:plot_all_variables.png}}
====== Creating One Scatter Plot for Each Factor Level ======
data(Cars93, package="MASS")
coplot(Horsepower ~ MPG.city | Origin, data=Cars93)
{{:R:scatterplot_each_factor.png}}
====== Creating a Bar Chart ======
> airquality
Ozone Solar.R Wind Temp Month Day
1 41 190 7.4 67 5 1
2 36 118 8.0 72 5 2
3 12 149 12.6 74 5 3
4 18 313 11.5 62 5 4
5 NA NA 14.3 56 5 5
6 28 NA 14.9 66 5 6
7 23 299 8.6 65 5 7
8 19 99 13.8 59 5 8
9 8 19 20.1 61 5 9
10 NA 194 8.6 69 5 10
11 7 NA 6.9 74 5 11
12 16 256 9.7 69 5 12
13 11 290 9.2 66 5 13
14 14 274 10.9 68 5 14
15 18 65 13.2 58 5 15
16 14 334 11.5 64 5 16
17 34 307 12.0 66 5 17
18 6 78 18.4 57 5 18
19 30 322 11.5 68 5 19
20 11 44 9.7 62 5 20
21 1 8 9.7 59 5 21
22 11 320 16.6 73 5 22
23 4 25 9.7 61 5 23
24 32 92 12.0 61 5 24
25 NA 66 16.6 57 5 25
26 NA 266 14.9 58 5 26
27 NA NA 8.0 57 5 27
28 23 13 12.0 67 5 28
29 45 252 14.9 81 5 29
30 115 223 5.7 79 5 30
31 37 279 7.4 76 5 31
32 NA 286 8.6 78 6 1
33 NA 287 9.7 74 6 2
34 NA 242 16.1 67 6 3
35 NA 186 9.2 84 6 4
36 NA 220 8.6 85 6 5
37 NA 264 14.3 79 6 6
38 29 127 9.7 82 6 7
39 NA 273 6.9 87 6 8
40 71 291 13.8 90 6 9
41 39 323 11.5 87 6 10
42 NA 259 10.9 93 6 11
43 NA 250 9.2 92 6 12
44 23 148 8.0 82 6 13
45 NA 332 13.8 80 6 14
46 NA 322 11.5 79 6 15
47 21 191 14.9 77 6 16
48 37 284 20.7 72 6 17
49 20 37 9.2 65 6 18
50 12 120 11.5 73 6 19
51 13 137 10.3 76 6 20
52 NA 150 6.3 77 6 21
53 NA 59 1.7 76 6 22
54 NA 91 4.6 76 6 23
55 NA 250 6.3 76 6 24
56 NA 135 8.0 75 6 25
57 NA 127 8.0 78 6 26
58 NA 47 10.3 73 6 27
59 NA 98 11.5 80 6 28
60 NA 31 14.9 77 6 29
61 NA 138 8.0 83 6 30
62 135 269 4.1 84 7 1
63 49 248 9.2 85 7 2
64 32 236 9.2 81 7 3
65 NA 101 10.9 84 7 4
66 64 175 4.6 83 7 5
67 40 314 10.9 83 7 6
68 77 276 5.1 88 7 7
69 97 267 6.3 92 7 8
70 97 272 5.7 92 7 9
71 85 175 7.4 89 7 10
72 NA 139 8.6 82 7 11
73 10 264 14.3 73 7 12
74 27 175 14.9 81 7 13
75 NA 291 14.9 91 7 14
76 7 48 14.3 80 7 15
77 48 260 6.9 81 7 16
78 35 274 10.3 82 7 17
79 61 285 6.3 84 7 18
80 79 187 5.1 87 7 19
81 63 220 11.5 85 7 20
82 16 7 6.9 74 7 21
83 NA 258 9.7 81 7 22
84 NA 295 11.5 82 7 23
85 80 294 8.6 86 7 24
86 108 223 8.0 85 7 25
87 20 81 8.6 82 7 26
88 52 82 12.0 86 7 27
89 82 213 7.4 88 7 28
90 50 275 7.4 86 7 29
91 64 253 7.4 83 7 30
92 59 254 9.2 81 7 31
93 39 83 6.9 81 8 1
94 9 24 13.8 81 8 2
95 16 77 7.4 82 8 3
96 78 NA 6.9 86 8 4
97 35 NA 7.4 85 8 5
98 66 NA 4.6 87 8 6
99 122 255 4.0 89 8 7
100 89 229 10.3 90 8 8
101 110 207 8.0 90 8 9
102 NA 222 8.6 92 8 10
103 NA 137 11.5 86 8 11
104 44 192 11.5 86 8 12
105 28 273 11.5 82 8 13
106 65 157 9.7 80 8 14
107 NA 64 11.5 79 8 15
108 22 71 10.3 77 8 16
109 59 51 6.3 79 8 17
110 23 115 7.4 76 8 18
111 31 244 10.9 78 8 19
112 44 190 10.3 78 8 20
113 21 259 15.5 77 8 21
114 9 36 14.3 72 8 22
115 NA 255 12.6 75 8 23
116 45 212 9.7 79 8 24
117 168 238 3.4 81 8 25
118 73 215 8.0 86 8 26
119 NA 153 5.7 88 8 27
120 76 203 9.7 97 8 28
121 118 225 2.3 94 8 29
122 84 237 6.3 96 8 30
123 85 188 6.3 94 8 31
124 96 167 6.9 91 9 1
125 78 197 5.1 92 9 2
126 73 183 2.8 93 9 3
127 91 189 4.6 93 9 4
128 47 95 7.4 87 9 5
129 32 92 15.5 84 9 6
130 20 252 10.9 80 9 7
131 23 220 10.3 78 9 8
132 21 230 10.9 75 9 9
133 24 259 9.7 73 9 10
134 44 236 14.9 81 9 11
135 21 259 15.5 76 9 12
136 28 238 6.3 77 9 13
137 9 24 10.9 71 9 14
138 13 112 11.5 71 9 15
139 46 237 6.9 78 9 16
140 18 224 13.8 67 9 17
141 13 27 10.3 76 9 18
142 24 238 10.3 68 9 19
143 16 201 8.0 82 9 20
144 13 238 12.6 64 9 21
145 23 14 9.2 71 9 22
146 36 139 10.3 81 9 23
147 7 49 10.3 69 9 24
148 14 20 16.6 63 9 25
149 30 193 6.9 70 9 26
150 NA 145 13.2 77 9 27
151 14 191 14.3 75 9 28
152 18 131 8.0 76 9 29
153 20 223 11.5 68 9 30
>
> heights <- tapply(airquality$Temp, airquality$Month, mean)
> barplot(heights)
{{:R:barplot_heights.png}}
> barplot(heights,
+ main="Mean Temp. by Month",
+ names.arg=c("May", "Jun", "Jul", "Aug", "Sep"),
+ ylab="Temp (deg. F)")
{{:R:barplot_heights.2.png}}
====== Adding Confidence Intervals to a Bar Chart ======
attach(airquality)
heights <- tapply(Temp, Month, mean)
install.packages("gplots") # for barplot2 function
library(gplots) # load barplot2 function
tmean <- tapply(Temp, list(as.factor(Month)), mean)
# mean for each month
tsd <- tapply(Temp, list(as.factor(Month)),sd)
# sd for each month
tse <- tsd/sqrt(length(Temp))
# se for each month
lower <- tmean - 1.96*tse
upper <- tmean + 1.96*tse
barplot2(heights, plot.ci=TRUE, ci.l=lower, ci.u=upper)
barplot2(heights, plot.ci=TRUE, ci.l=lower, ci.u=upper,
ylim=c(50,90), xpd=FALSE,
main="Mean Temp. By Month",
names.arg=c("May","Jun","Jul","Aug","Sep"),
ylab="Temp (deg. F)")
====== Coloring a Bar Chart ======
barplot(c(3,5,4), col=c("red","white","blue"))
rel.hts <- rank(heights) / length(heights)
grays <- gray(1 - rel.hts)
barplot(heights, col=grays)
rel.hts <- (heights - min(heights)) / (max(heights) - min(heights))
grays <- gray(1 - rel.hts)
barplot(heights,
col=grays,
ylim=c(50,90), xpd=FALSE,
main="Mean Temp. By Month",
names.arg=c("May", "Jun", "Jul", "Aug", "Sep"),
ylab="Temp (deg. F)")
====== Plotting a Line from x and y Points ======
plot(pressure)
plot(pressure, type="l")
{{:R:barplot_points_line.png}}
> par(mfrow=c(2, 2), cex=0.6, mar=c(4, 4, 1, 1))
> y <- rnorm(20)
> plot(y, type="p")
> plot(y, type="l")
> plot(y, type="b")
> plot(y, type="h")
>
{{:r:plot_types.png}}
====== Plotting Multiple Datasets ======
x <- rnorm(10,sd=5,mean=20)
y <- 2.5*x - 1.0 + rnorm(10,sd=9,mean=0)
cor(x,y)
[1] 0.7400576
plot(x,y,xlab="Independent",ylab="Dependent",main="Random Stuff")
x1 <- runif(8,15,25)
y1 <- 2.5*x1 - 1.0 + runif(8,-6,6)
points(x1,y1,col=2)
{{:R:plotting_multiple_datasets.png}}
====== Adding Vertical or Horizontal Lines ======
> abline(v=0) # Vertical line at x = 0
> abline(h=0) # Horizontal line at y = 0
====== Creating a Box Plot ======
boxplot(x), where x is a vector of numeric values.
boxplot(Cars93$MPG.city)
====== Creating One Box Plot for Each Factor Level ======
boxplot(Cars93$MPG.city~Cars93$Origin)
{{:R:boxplot.png}}
> library(MASS)
> UScereal
mfr calories protein
100% Bran N 212.12121 12.1212121
All-Bran K 212.12121 12.1212121
All-Bran with Extra Fiber K 100.00000 8.0000000
Apple Cinnamon Cheerios G 146.66667 2.6666667
Apple Jacks K 110.00000 2.0000000
Basic 4 G 173.33333 4.0000000
Bran Chex R 134.32836 2.9850746
Bran Flakes P 134.32836 4.4776119
Cap'n'Crunch Q 160.00000 1.3333333
Cheerios G 88.00000 4.8000000
Cinnamon Toast Crunch G 160.00000 1.3333333
Clusters G 220.00000 6.0000000
Cocoa Puffs G 110.00000 1.0000000
Corn Chex R 110.00000 2.0000000
Corn Flakes K 100.00000 2.0000000
Corn Pops K 110.00000 1.0000000
Count Chocula G 110.00000 1.0000000
Cracklin' Oat Bran K 220.00000 6.0000000
Crispix K 110.00000 2.0000000
Crispy Wheat & Raisins G 133.33333 2.6666667
Double Chex R 133.33333 2.6666667
Froot Loops K 110.00000 2.0000000
Frosted Flakes K 146.66667 1.3333333
Frosted Mini-Wheats K 125.00000 3.7500000
Fruit & Fibre: Dates Walnuts and Oats P 179.10448 4.4776119
Fruitful Bran K 179.10448 4.4776119
Fruity Pebbles P 146.66667 1.3333333
Golden Crisp P 113.63636 2.2727273
Golden Grahams G 146.66667 1.3333333
Grape Nuts Flakes P 113.63636 3.4090909
Grape-Nuts P 440.00000 12.0000000
Great Grains Pecan P 363.63636 9.0909091
Honey Graham Ohs Q 120.00000 1.0000000
Honey Nut Cheerios G 146.66667 4.0000000
Honey-comb P 82.70677 0.7518797
Just Right Fruit & Nut K 186.66667 4.0000000
Kix G 73.33333 1.3333333
Life Q 149.25373 5.9701493
Lucky Charms G 110.00000 2.0000000
Mueslix Crispy Blend K 238.80597 4.4776119
Multi-Grain Cheerios G 100.00000 2.0000000
Nut&Honey Crunch K 179.10448 2.9850746
Nutri-Grain Almond-Raisin K 208.95522 4.4776119
Oatmeal Raisin Crisp G 260.00000 6.0000000
Post Nat. Raisin Bran P 179.10448 4.4776119
Product 19 K 100.00000 3.0000000
Puffed Rice Q 50.00000 1.0000000
Quaker Oat Squares Q 200.00000 8.0000000
Raisin Bran K 160.00000 4.0000000
Raisin Nut Bran G 200.00000 6.0000000
Raisin Squares K 180.00000 4.0000000
Rice Chex R 97.34513 0.8849558
Rice Krispies K 110.00000 2.0000000
Shredded Wheat 'n'Bran N 134.32836 4.4776119
Shredded Wheat spoon size N 134.32836 4.4776119
Smacks K 146.66667 2.6666667
Special K K 110.00000 6.0000000
Total Corn Flakes G 110.00000 2.0000000
Total Raisin Bran G 140.00000 3.0000000
Total Whole Grain G 100.00000 3.0000000
Triples G 146.66667 2.6666667
Trix G 110.00000 1.0000000
Wheat Chex R 149.25373 4.4776119
Wheaties G 100.00000 3.0000000
Wheaties Honey Gold G 146.66667 2.6666667
fat sodium fibre
100% Bran 3.0303030 393.93939 30.303030
All-Bran 3.0303030 787.87879 27.272727
All-Bran with Extra Fiber 0.0000000 280.00000 28.000000
Apple Cinnamon Cheerios 2.6666667 240.00000 2.000000
Apple Jacks 0.0000000 125.00000 1.000000
Basic 4 2.6666667 280.00000 2.666667
Bran Chex 1.4925373 298.50746 5.970149
Bran Flakes 0.0000000 313.43284 7.462687
Cap'n'Crunch 2.6666667 293.33333 0.000000
Cheerios 1.6000000 232.00000 1.600000
Cinnamon Toast Crunch 4.0000000 280.00000 0.000000
Clusters 4.0000000 280.00000 4.000000
Cocoa Puffs 1.0000000 180.00000 0.000000
Corn Chex 0.0000000 280.00000 0.000000
Corn Flakes 0.0000000 290.00000 1.000000
Corn Pops 0.0000000 90.00000 1.000000
Count Chocula 1.0000000 180.00000 0.000000
Cracklin' Oat Bran 6.0000000 280.00000 8.000000
Crispix 0.0000000 220.00000 1.000000
Crispy Wheat & Raisins 1.3333333 186.66667 2.666667
Double Chex 0.0000000 253.33333 1.333333
Froot Loops 1.0000000 125.00000 1.000000
Frosted Flakes 0.0000000 266.66667 1.333333
Frosted Mini-Wheats 0.0000000 0.00000 3.750000
Fruit & Fibre: Dates Walnuts and Oats 2.9850746 238.80597 7.462687
Fruitful Bran 0.0000000 358.20896 7.462687
Fruity Pebbles 1.3333333 180.00000 0.000000
Golden Crisp 0.0000000 51.13636 0.000000
Golden Grahams 1.3333333 373.33333 0.000000
Grape Nuts Flakes 1.1363636 159.09091 3.409091
Grape-Nuts 0.0000000 680.00000 12.000000
Great Grains Pecan 9.0909091 227.27273 9.090909
Honey Graham Ohs 2.0000000 220.00000 1.000000
Honey Nut Cheerios 1.3333333 333.33333 2.000000
Honey-comb 0.0000000 135.33835 0.000000
Just Right Fruit & Nut 1.3333333 226.66667 2.666667
Kix 0.6666667 173.33333 0.000000
Life 2.9850746 223.88060 2.985075
Lucky Charms 1.0000000 180.00000 0.000000
Mueslix Crispy Blend 2.9850746 223.88060 4.477612
Multi-Grain Cheerios 1.0000000 220.00000 2.000000
Nut&Honey Crunch 1.4925373 283.58209 0.000000
Nutri-Grain Almond-Raisin 2.9850746 328.35821 4.477612
Oatmeal Raisin Crisp 4.0000000 340.00000 3.000000
Post Nat. Raisin Bran 1.4925373 298.50746 8.955224
Product 19 0.0000000 320.00000 1.000000
Puffed Rice 0.0000000 0.00000 0.000000
Quaker Oat Squares 2.0000000 270.00000 4.000000
Raisin Bran 1.3333333 280.00000 6.666667
Raisin Nut Bran 4.0000000 280.00000 5.000000
Raisin Squares 0.0000000 0.00000 4.000000
Rice Chex 0.0000000 212.38938 0.000000
Rice Krispies 0.0000000 290.00000 0.000000
Shredded Wheat 'n'Bran 0.0000000 0.00000 5.970149
Shredded Wheat spoon size 0.0000000 0.00000 4.477612
Smacks 1.3333333 93.33333 1.333333
Special K 0.0000000 230.00000 1.000000
Total Corn Flakes 1.0000000 200.00000 0.000000
Total Raisin Bran 1.0000000 190.00000 4.000000
Total Whole Grain 1.0000000 200.00000 3.000000
Triples 1.3333333 333.33333 0.000000
Trix 1.0000000 140.00000 0.000000
Wheat Chex 1.4925373 343.28358 4.477612
Wheaties 1.0000000 200.00000 3.000000
Wheaties Honey Gold 1.3333333 266.66667 1.333333
carbo sugars shelf
100% Bran 15.15152 18.181818 3
All-Bran 21.21212 15.151515 3
All-Bran with Extra Fiber 16.00000 0.000000 3
Apple Cinnamon Cheerios 14.00000 13.333333 1
Apple Jacks 11.00000 14.000000 2
Basic 4 24.00000 10.666667 3
Bran Chex 22.38806 8.955224 1
Bran Flakes 19.40299 7.462687 3
Cap'n'Crunch 16.00000 16.000000 2
Cheerios 13.60000 0.800000 1
Cinnamon Toast Crunch 17.33333 12.000000 2
Clusters 26.00000 14.000000 3
Cocoa Puffs 12.00000 13.000000 2
Corn Chex 22.00000 3.000000 1
Corn Flakes 21.00000 2.000000 1
Corn Pops 13.00000 12.000000 2
Count Chocula 12.00000 13.000000 2
Cracklin' Oat Bran 20.00000 14.000000 3
Crispix 21.00000 3.000000 3
Crispy Wheat & Raisins 14.66667 13.333333 3
Double Chex 24.00000 6.666667 3
Froot Loops 11.00000 13.000000 2
Frosted Flakes 18.66667 14.666667 1
Frosted Mini-Wheats 17.50000 8.750000 2
Fruit & Fibre: Dates Walnuts and Oats 17.91045 14.925373 3
Fruitful Bran 20.89552 17.910448 3
Fruity Pebbles 17.33333 16.000000 2
Golden Crisp 12.50000 17.045455 1
Golden Grahams 20.00000 12.000000 2
Grape Nuts Flakes 17.04545 5.681818 3
Grape-Nuts 68.00000 12.000000 3
Great Grains Pecan 39.39394 12.121212 3
Honey Graham Ohs 12.00000 11.000000 2
Honey Nut Cheerios 15.33333 13.333333 1
Honey-comb 10.52632 8.270677 1
Just Right Fruit & Nut 26.66667 12.000000 3
Kix 14.00000 2.000000 2
Life 17.91045 8.955224 2
Lucky Charms 12.00000 12.000000 2
Mueslix Crispy Blend 25.37313 19.402985 3
Multi-Grain Cheerios 15.00000 6.000000 1
Nut&Honey Crunch 22.38806 13.432836 2
Nutri-Grain Almond-Raisin 31.34328 10.447761 3
Oatmeal Raisin Crisp 27.00000 20.000000 3
Post Nat. Raisin Bran 16.41791 20.895522 3
Product 19 20.00000 3.000000 3
Puffed Rice 13.00000 0.000000 3
Quaker Oat Squares 28.00000 12.000000 3
Raisin Bran 18.66667 16.000000 2
Raisin Nut Bran 21.00000 16.000000 3
Raisin Squares 30.00000 12.000000 3
Rice Chex 20.35398 1.769912 1
Rice Krispies 22.00000 3.000000 1
Shredded Wheat 'n'Bran 28.35821 0.000000 1
Shredded Wheat spoon size 29.85075 0.000000 1
Smacks 12.00000 20.000000 2
Special K 16.00000 3.000000 1
Total Corn Flakes 21.00000 3.000000 3
Total Raisin Bran 15.00000 14.000000 3
Total Whole Grain 16.00000 3.000000 3
Triples 28.00000 4.000000 3
Trix 13.00000 12.000000 2
Wheat Chex 25.37313 4.477612 1
Wheaties 17.00000 3.000000 1
Wheaties Honey Gold 21.33333 10.666667 1
potassium vitamins
100% Bran 848.48485 enriched
All-Bran 969.69697 enriched
All-Bran with Extra Fiber 660.00000 enriched
Apple Cinnamon Cheerios 93.33333 enriched
Apple Jacks 30.00000 enriched
Basic 4 133.33333 enriched
Bran Chex 186.56716 enriched
Bran Flakes 283.58209 enriched
Cap'n'Crunch 46.66667 enriched
Cheerios 84.00000 enriched
Cinnamon Toast Crunch 60.00000 enriched
Clusters 210.00000 enriched
Cocoa Puffs 55.00000 enriched
Corn Chex 25.00000 enriched
Corn Flakes 35.00000 enriched
Corn Pops 20.00000 enriched
Count Chocula 65.00000 enriched
Cracklin' Oat Bran 320.00000 enriched
Crispix 30.00000 enriched
Crispy Wheat & Raisins 160.00000 enriched
Double Chex 106.66667 enriched
Froot Loops 30.00000 enriched
Frosted Flakes 33.33333 enriched
Frosted Mini-Wheats 125.00000 enriched
Fruit & Fibre: Dates Walnuts and Oats 298.50746 enriched
Fruitful Bran 283.58209 enriched
Fruity Pebbles 33.33333 enriched
Golden Crisp 45.45455 enriched
Golden Grahams 60.00000 enriched
Grape Nuts Flakes 96.59091 enriched
Grape-Nuts 360.00000 enriched
Great Grains Pecan 303.03030 enriched
Honey Graham Ohs 45.00000 enriched
Honey Nut Cheerios 120.00000 enriched
Honey-comb 26.31579 enriched
Just Right Fruit & Nut 126.66667 100%
Kix 26.66667 enriched
Life 141.79104 enriched
Lucky Charms 55.00000 enriched
Mueslix Crispy Blend 238.80597 enriched
Multi-Grain Cheerios 90.00000 enriched
Nut&Honey Crunch 59.70149 enriched
Nutri-Grain Almond-Raisin 194.02985 enriched
Oatmeal Raisin Crisp 240.00000 enriched
Post Nat. Raisin Bran 388.05970 enriched
Product 19 45.00000 100%
Puffed Rice 15.00000 none
Quaker Oat Squares 220.00000 enriched
Raisin Bran 320.00000 enriched
Raisin Nut Bran 280.00000 enriched
Raisin Squares 220.00000 enriched
Rice Chex 26.54867 enriched
Rice Krispies 35.00000 enriched
Shredded Wheat 'n'Bran 208.95522 none
Shredded Wheat spoon size 179.10448 none
Smacks 53.33333 enriched
Special K 55.00000 enriched
Total Corn Flakes 35.00000 100%
Total Raisin Bran 230.00000 100%
Total Whole Grain 110.00000 100%
Triples 80.00000 enriched
Trix 25.00000 enriched
Wheat Chex 171.64179 enriched
Wheaties 110.00000 enriched
Wheaties Honey Gold 80.00000 enriched
>
boxplot(sugars ~ shelf, data=UScereal)
boxplot(sugars ~ shelf, data=UScereal,
main="Sugar Content by Shelf",
xlab="Shelf", ylab="Sugar (grams per portion)")
{{:R:boxplot2.png}}
====== Creating a Histogram ======
Use hist(x), where x is a vector of numeric values.
data(Cars93, package="MASS")
hist(Cars93$MPG.city)
hist(Cars93$MPG.city, 20)
hist(Cars93$MPG.city, 20, main="City MPG (1993)", xlab="MPG")
{{:r:hist_Cars93.png}}
====== Creating a Normal Quantile-Quantile (Q-Q) Plot ======
data(Cars93, package="MASS")
qqnorm(Cars93$Price, main="Q-Q Plot: Price")
qqline(Cars93$Price)
data(Cars93, package="MASS")
qqnorm(log(Cars93$Price), main="Q-Q Plot: log(Price)")
qqline(log(Cars93$Price))
{{:R:qqplot.png}}
====== E.G. ======
#
# Comment:
#
# Examples of the use of standard high-level plotting functions.
#
# In each case, extra output is also added using low-level
# plotting functions.
#
par(mfrow=c(3, 2))
# Scatterplot
x <- c(0.5, 2, 4, 8, 12, 16)
y1 <- c(1, 1.3, 1.9, 3.4, 3.9, 4.8)
y2 <- c(4, .8, .5, .45, .4, .3)
par(las=1, mar=c(4, 4, 2, 4))
plot.new()
plot.window(range(x), c(0, 6))
lines(x, y1)
lines(x, y2)
points(x, y1, pch=16, cex=2)
points(x, y2, pch=21, bg="white", cex=2)
par(col="grey50", fg="grey50", col.axis="grey50")
axis(1, at=seq(0, 16, 4))
axis(2, at=seq(0, 6, 2))
axis(4, at=seq(0, 6, 2))
box(bty="u")
mtext("Travel Time (s)", side=1, line=2, cex=0.8)
mtext("Responses per Travel", side=2, line=2, las=0, cex=0.8)
mtext("Responses per Second", side=4, line=2, las=0, cex=0.8)
text(4, 5, "Bird 131")
par(mar=c(5.1, 4.1, 4.1, 2.1), col="black", fg="black", col.axis="black")
# Histogram
# Random data
Y <- rnorm(50)
# Make sure no Y exceed [-3.5, 3.5]
Y[Y < -3.5 | Y > 3.5] <- NA
x <- seq(-3.5, 3.5, .1)
dn <- dnorm(x)
par(mar=c(4.5, 4.1, 3.1, 0))
hist(Y, breaks=seq(-3.5, 3.5), ylim=c(0, 0.5),
col="grey80", freq=FALSE)
lines(x, dnorm(x), lwd=2)
par(mar=c(5.1, 4.1, 4.1, 2.1))
# Barplot
# Modified from example(barplot)
par(mar=c(2, 3.1, 2, 2.1))
midpts <- barplot(VADeaths, col=grey(0.5 + 1:5/12),
names=rep("", 4))
mtext(sub(" ", "\n", colnames(VADeaths)),
at=midpts, side=1, line=0.5, cex=0.5)
text(rep(midpts, each=5), apply(VADeaths, 2, cumsum) - VADeaths/2,
VADeaths, col=rep(c("white", "black"), times=2:3, cex=0.8))
par(mar=c(5.1, 4.1, 4.1, 2.1))
# Boxplot
# Modified example(boxplot) - itself from suggestion by Roger Bivand
par(mar=c(3, 4.1, 2, 0))
boxplot(len ~ dose, data = ToothGrowth,
boxwex = 0.25, at = 1:3 - 0.2,
subset= supp == "VC", col="grey90",
xlab="",
ylab="tooth length", ylim=c(0,35))
mtext("Vitamin C dose (mg)", side=1, line=2.5, cex=0.8)
boxplot(len ~ dose, data = ToothGrowth, add = TRUE,
boxwex = 0.25, at = 1:3 + 0.2,
subset= supp == "OJ", col="grey70")
legend(1.5, 9, c("Ascorbic acid", "Orange juice"), bty="n",
fill = c("grey90", "grey70"))
par(mar=c(5.1, 4.1, 4.1, 2.1))
# Persp
# Almost exactly example(persp)
x <- seq(-10, 10, length= 30)
y <- x
f <- function(x,y) { r <- sqrt(x^2+y^2); 10 * sin(r)/r }
z <- outer(x, y, f)
z[is.na(z)] <- 1
# 0.5 to include z axis label
par(mar=c(0, 0.5, 0, 0), lwd=0.1)
persp(x, y, z, theta = 30, phi = 30, expand = 0.5, col = "grey80")
par(mar=c(5.1, 4.1, 4.1, 2.1), lwd=1)
# Piechart
# Example 4 from help(pie)
par(mar=c(0, 2, 1, 2), xpd=FALSE, cex=0.5)
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")
pie(pie.sales, col = gray(seq(0.4,1.0,length=6)))
{{:R:various_graphs.png}}
#
# Comment:
#
# A bit of mucking around is required to get the second (whole-world)
# map positioned correctly; this provides an example of calling a
# plotting function to perform calculations but do no drawing (see the
# second call to the map() function).
#
# Makes use of the "maps" and "mapproj" packages to draw the maps.
#
library(maps)
par(mar=rep(0, 4))
map("nz", fill=TRUE, col="grey80")
points(174.75, -36.87, pch=16, cex=2)
arrows(172, -36.87, 174, -36.87, lwd=3)
text(172, -36.87, "Auckland ", adj=1, cex=2)
# mini world map as guide
maplocs <- map(projection="sp_mercator", wrap=TRUE, lwd=0.1,
col="grey", ylim=c(-60, 75),
interior=FALSE, orientation=c(90, 180, 0), add=TRUE,
plot=FALSE)
xrange <- range(maplocs$x, na.rm=TRUE)
yrange <- range(maplocs$y, na.rm=TRUE)
aspect <- abs(diff(yrange))/abs(diff(xrange))
# customised to 6.5 by 4.5 figure size
par(fig=c(0.99 - 0.5, 0.99, 0.01, 0.01 + 0.5*aspect*4.5/6.5),
mar=rep(0, 4), new=TRUE)
plot.new()
plot.window(xlim=xrange,
ylim=yrange)
map(projection="sp_mercator", wrap=TRUE, lwd=0.1, ylim=c(-60, 75),
interior=FALSE, orientation=c(90, 180, 0), add=TRUE)
symbols(-.13, -0.8, circles=1, inches=0.1, add=TRUE)
{{:R:using_maps_R.png}}
par(mfrow=c(2, 2))
z <- 2 * volcano # Exaggerate the relief
x <- 10 * (1:nrow(z)) # 10 meter spacing (S to N)
y <- 10 * (1:ncol(z)) # 10 meter spacing (E to W)
# Don't draw the grid lines : border = NA
par(mar=rep(0, 4))
persp(x, y, z, theta = 135, phi = 30, col = "light grey", scale = FALSE,
ltheta = -120, shade = 0.75, border = NA, box = FALSE)
mtext("persp()", side=3, line=-2)
par(mar=c(3, 3, 2, 0.5))
# Note that example(trees) shows more sensible plots!
N <- nrow(trees)
attach(trees)
# Girth is diameter in inches
symbols(Height, Volume, circles=Girth/24, inches=FALSE,
main="", xlab="", ylab="", bg=grey(Girth/max(Girth)))
mtext("symbols()", side=3, line=0.5)
par(mar=rep(0.5, 4))
contour(x, y, z, asp=1, labcex=0.35, axes=FALSE)
rect(0, 0, 870, 620)
mtext("contour()", side=3, line=-1.5)
image(x, y, z, asp=1, col=grey(0.5 + 1:12/24), xlab="", ylab="", axes=FALSE)
rect(min(x)-5, min(y)-5, max(x)+5, max(y)+5)
mtext("image()", side=3, line=-1.5)
{{:R:poly_graph.png}}