data( cars )
summary( cars )
cars
head( cars )
tail( cars )
str( cars )
plot ( cars )
windows( width = 4.5, height = 3.3, pointsize = 8 )

# pointsize: 文字或符號字體大小

windows( width = 8, height = 6, pointsize = 20 )
old.par <- par( mex = 0.8, mar = c(5, 5, 4, 2) + 0.1 )
# mex: 邊界文字的縮放比
# mar: 下 左 上 右 四個邊界之預留距離
# 下: side=1,  左: side=2, 上: side=3, 右: side=4

old.par <- par( mex = 0.8, mar = c(5, 5, 4, 2) + 0.1 )
plot ( cars )
par( old.par )
windows( width = 4.5, height = 3.3, pointsize = 8 )
old.par <- par( mex = 0.8, mar = c(5, 5, 4, 2) + 0.1 )

plot ( cars )
par( old.par )  	# reset to previous settings

win.graph( width = 4.5, height = 3.3, pointsize = 8 )
old.par <- par( mex = 0.8, mar = c(5, 5, 4, 2) + 0.1 )

plot( cars )
par( old.par )  	# reset to previous settings

# 常用的圖形參數

windows( width = 4.5, height = 3.3, pointsize = 8 )
old.par <- par( mex = 0.8, mar = c(7, 5, 4, 2) + 0.1 )
plot( cars, xlim = c(0, 30), ylim = c(0, 130), xlab = "xlab", ylab = "ylab", main = "main title", sub = "subtitle", cex = 0.8, pch = 16, col = "red")
par( old.par )
# reset to previous settings

windows( width = 4.5, height = 3.3, pointsize = 8 )
old.par <- par( mex = 0.8, mar = c(5, 5, 4, 2) + 0.1 )
plot( 1:25, pch = 0:25, col = 1:8, xlab = "number", ylab = "" )
par( old.par )

windows( width = 4.5, height = 3.3, pointsize = 8 )
old.par <- par( mex = 0.8, mar = c(5, 5, 4, 2) + 0.1 )
plot( 1:25, pch = 0:25, col = 1:8, xlab = "number", ylab = "" )
par( old.par )

# 座標軸及邊界

windows( width = 4.5, height = 3.3, pointsize = 8 )
old.par <- par( mex = 0.8, mar = c(5, 5, 4, 3) + 0.1 )
plot( 0:10, 0:10, col = 1:10, pch = 16, xlab = "X axis", ylab = "Y axis", axes = FALSE )
plot( 0:10, 0:10, col = 1:10, pch = 16, xlab = "X axis", ylab = "Y axis", axes = FALSE )

axis( side = 1, col = "black", col.axis = "red", at = 0:10, label = LETTERS[1:11] )
axis( side = 2, col = "green", col.axis = "blue", at = seq(from = 0, to = 10, by = 1) )
axis( side = 3, col = "cyan", col.axis = "magenta", at = seq(from = 0, to = 8, by = 1) )
axis( side = 4, col = "yellow", col.axis = "gray", at = seq(from = 2, to = 10, by = 2), label = c(20, 40, 60, 80, 100) )

par( old.par )

# 加入文字

windows( width = 4.5, height = 3.3, pointsize = 8 )
old.par <- par( mex = 0.8, mar = c(5, 5, 4, 2) + 0.1 )

plot( cars, xlab = "", ylab = "" )

title( main = "cars data", xlab = "speed", ylab = "distance" )

windows( width = 4.5, height = 3.3, pointsize = 8 )
old.par <- par( mex = 0.8, mar = c(5, 5, 4, 2) + 0.1 )

plot( cars, xlab = "", ylab = "" )
title( main = "cars data", xlab = "speed", ylab = "distance" )
text( 20, 100, label = "text here" )
legend( "topleft", legend = c("x: speed", "y: distance") )
mtext( text = c("Bottom", "Left", "Top", "Right"), side = 1:4, col = 1:4, line = -2 )									# line = -2: 往內移動兩個線寬度
par(old.par)

mtext( text = c("Bottom", "Left", "Top", "Right"), side = 1:4, col = 1:4, line = -2 )
par(old.par)

windows( width = 4.5, height = 3.3, pointsize = 8 )
old.par <- par( mex = 0.8, mar = c(5, 5, 4, 2) + 0.1 )

plot( cars, xlab = "", ylab = "" )

title( main = "cars data", xlab = "speed", ylab = "distance" )
text( 20, 100, label = "text here" )
legend( locator(1), legend = c("x: speed", "y: distance") )
par(old.par)

windows( width = 4.5, height = 3.3, pointsize = 8 )
old.par <- par( mex = 0.8, mar = c(5, 5, 4, 2) + 0.1 )

plot(0:10, 0:10, xlab = "", ylab = "", pch = 1:10, col = 1:10)

text( 2, 8, label = expression( chi^2 == "4.4" ) )
text( 2, 7, label = expression( x[3] == "5.5" ) )
text( 2, 6, label = expression( y[3]^2 == "8.8" ) )
text( 8, 5, label = expression( hat(y) %+-% z ) )
label.eq <- expression( paste( "f(x) = ", frac(1, sigma*sqrt(2 * pi)), " ", e^{frac(-(x - mu)^2, 2*sigma^2)} ) )
text( 7, 2, label = label.eq )

par( old.par )

x <- seq( from = -4, to = 4, length = 101 )
win.graph( width = 2.8, height = 2.8, pointsize = 8 )
old.par <- par( mex = 0.8, mar = c(5, 5, 3, 2) + 0.1 )

xlab <- expression( paste( "phase angle ", phi ) )
ylab <- expression( paste( "cos(", phi, ")" ) )

plot( x, cos(x), type = "l", xaxt = "n", xlab = xlab, ylab = ylab )

label <- expression( -pi, -pi / 2, 0, pi / 2, pi )
axis( side = 1, at = c(-pi, -pi / 2, 0, pi / 2, pi), label = label )
par(old.par)

demo( plotmath )

demo( Hershey )


# 多張圖形

windows( width = 4.5, height = 3.3, pointsize = 8 )
old.par <- par( mfrow = c(2, 2), mex = 0.8, mar = c(5, 5, 4, 2) + 0.1 )

plot( cars, main = "cars data", cex = 2 )
plot( cars, main = "cars data", cex.axis = 2 )
plot( cars, main = "cars data", cex.lab = 2 )
plot( cars, main = "cars data", cex.main = 2 )
par( old.par )

windows(width = 4.5, height = 3.3, pointsize = 8)
old.par <- par(mfrow = c(2, 2), mex = 0.8, mar = c(5, 5, 4, 4) + 0.1)

plot( cars, main = "las = 0", las = 0 )
# 0: always parallel to the axis [default]

plot( cars, main = "las = 1", las = 1 )
# 1: always horizontal

plot( cars, main = "las = 2", las = 2 )
# 2: always perpendicular to the axis

plot( cars, main = "las = 3", las = 3 )
# 3: always vertical

par( old.par )

windows( width = 4.5, height = 3.3, pointsize = 8 )
old.par <- par( mfrow = c(2, 3), mex = 0.6, mar = c(5, 4, 4, 2) + 0.1 )

plot( cars, type = "p", main = "type = p" )	# "p" for points
plot( cars, type = "l", main = "type = l" )	# "l" for lines
plot( cars, type = "b", main = "type = b" )	# "b" for both
plot( cars, type = "o", main = "type = o" )	# "o" for both ‘overplotted’
plot( cars, type = "h", main = "type = h" )	# "h" for histogram-like vertical lines
plot( cars, type = "n", main = "type = n" )	# "n" for no plotting
par(old.par)

layout( matrix( 1:4, nrow = 2 ) )

# 2x2 的圖形矩陣，依照指定的位置

layout( matrix( c(1, 2, 1, 3), nrow = 2, ncol = 2 ) )
layout( matrix( c(1, 2, 0, 3), nrow = 2, ncol = 2), width = c(2, 1), height = c(1, 1.5) )

windows( width = 4.5, height = 3.3, pointsize = 8 )
old.par <- par( mex = 0.8, mar = c(5, 4, 4, 2) + 0.1 )

layout( matrix( 1:4, nrow = 2) )

plot( cars, las = 0, main = "las = 0" )
plot( cars, las = 1, main = "las = 1" )
plot( cars, las = 2, main = "las = 2" )
plot( cars, las = 3, main = "las = 3" )

layout(1)
par(old.par)

windows( width = 4.5, height = 3.3, pointsize = 8 )
old.par <- par( mex = 0.8, mar = c(5, 4, 4, 2) + 0.1 )

layout( matrix( c(1, 2, 1, 3), nrow = 2, ncol = 2) )

plot( cars, las = 1, main = "las = 1" )
plot( cars, las = 2, main = "las = 2" )
plot( cars, las = 3, main = "las = 3" )

layout(1)
par(old.par)

windows( width = 4.5, height = 3.3, pointsize = 8 )
old.par <- par( mex = 0.8, mar = c(5, 4, 4, 2) + 0.1 )

layout( matrix( c(1, 2, 0, 3), nrow = 2, ncol = 2), width = c(2, 1), height = c(1, 1.5))

plot( cars, las = 1, main = "las = 1" )
plot( cars, las = 2, main = "las = 2" )
plot( cars, las = 3, main = "las = 3" )

layout(1)
par(old.par)

# 加入圖形元件

x <- c( 2, 3, 4 )
y <- c( 6, 7, 8 )

windows( width = 4.5, height = 3.3, pointsize = 8 )
old.par <- par( mex = 0.8, mar = c(5, 4, 4, 2) + 0.1 )

plot( 0:10, 0:10, xlab = "", ylab = "", pch = 1:11, col = 1:8, axes = FALSE )

axis( side = 1, at = 0:10 )
axis( side = 2, at = 0:10 )
box()

lines( c(1, 2), c(9, 10), col = "yellow", lwd = 3 )
abline( a = -2, b = 1, col = "gold", lwd = 2 )
abline( h = 1:3, lty = 1:3, lwd = c(1.0, 1.5, 2.0), col = c("red", "green", "blue") )
abline( v = 6:8, lty = 1:3, lwd = c(1.0, 1.5, 2.0), col = c("red", "green", "blue") )

points( x, y, col = "violet", pch = 16, cex = 2 )

segments( x[1], y[1], x[2], y[2], col = "violet", lwd = 2)
segments( x[2], y[2], x[3], y[3], col = "dark violet", lwd = 2 )

arrows( 1, 7, 1, 8, code = 1, length = 0.1, col = "pink", lwd = 2 )
arrows( 2, 8, 3, 9, code = 2, length = 0.1, col = "pink", lwd = 2 )

windows( width = 4.5, height = 3.3, pointsize = 8 )
old.par <- par( mex = 0.8, mar = c(5, 4, 4, 2) + 0.1 )

plot( 0:10, 0:10, xlab = "", ylab = "", pch = 1:11, col = 1:8, type = "n" )

axis( side = 1, at = 0:10 )
axis( side = 2, at = 0:10 )

# 臉輪廓
symbols( 5, 5, circles = 4, fg = "blue", lwd = 2, inches = FALSE, add = TRUE )

# 眼睛
symbols( 3.5, 6.5, circles = 0.5, fg = "dark violet", bg = "purple", inches = FALSE, add = TRUE )
symbols( 6.5, 6.5, circles = 0.5, fg = "dark violet", bg = "purple", inches = FALSE, add = TRUE )

# 眉毛
symbols( 3.5, 8.5, rectangles = matrix(c(1.5, 0.5), nrow =1), fg = "gray", inches = FALSE, add = TRUE )
symbols( 6.5, 8.5, rectangles = matrix(c(1.5, 0.5), nrow =1), fg = "gray", inches = FALSE, add = TRUE )

# 鼻子
symbols( 5, 4.5, rectangles = matrix(c(0.5, 2), nrow =1), fg = "green", bg = "lightgreen", inches = FALSE, add = TRUE )

# 嘴巴
symbols( 5, 1.5, squares = 1.5, fg = "red", lwd = 2, inches = FALSE, add = TRUE )

# 鬍子
polygon( c(3.5, 3, 2), c(3, 3, 2), col = "orange" )
polygon( c(6.5, 7, 8), c(3, 3, 2), col = "orange" )

x <- seq(from = -pi, to = pi, length = 101)
y1 <- sin(x)
y2 <- cos(x)
y3 <- sin(x) + cos(x)
ylim <- range(y1, y2, y3)

win.graph( width = 2.8, height = 2.8, pointsize = 8 )
old.par <- par( mex = 0.8, mar = c(5, 4, 3, 1) + 0.1 )

plot( x, y1, xlim = range(x), ylim = ylim, type = "n", xaxt = "n", xlab = "x", ylab = "", main = "Using matpoints()" )

label <- expression( -pi, -pi / 2, 0, pi / 2, pi )
axis( side = 1, at = c(-pi, -pi / 2, 0, pi / 2, pi), label = label )
matpoints( x, cbind(y1, y2, y3), type = "l", col = c("red", "green", "blue"), lty = 1:3, lwd = 1:3 )
legend( "topleft", legend = c("y1", "y2", "y3"), col = c("red", "green", "blue"), lty = 1:3, lwd = 1:3 )

par(old.par)

x <- seq(from = -pi, to = pi, length = 101)
y1 <- sin(x)
y2 <- cos(x)
y3 <- sin(x) + cos(x)
ylim <- range(y1, y2, y3)

win.graph( width = 8, height = 8, pointsize = 8 )
old.par <- par( mex = 0.8, mar = c(5, 4, 3, 1) + 0.1 )

plot( x, y1, xlim = range(x), ylim = ylim, type = "n", xaxt = "n", xlab = "x", ylab = "", main = "Using matpoints()" )

label <- expression( -pi, -pi / 2, 0, pi / 2, pi )
axis( side = 1, at = c(-pi, -pi / 2, 0, pi / 2, pi), label = label )
matpoints( x, cbind(y1, y2, y3), type = "l", col = c("red", "green", "blue"), lty = 1:3, lwd = 1:3 )
legend( "topleft", legend = c("y1", "y2", "y3"), col = c("red", "green", "blue"), lty = 1:3, lwd = 1:3 )

par(old.par)

win.graph( width = 2.8, height = 2.8, pointsize = 8 )
old.par <- par( mex = 0.8, mar = c(5, 4, 3, 1) + 0.1 )

plot( x, y1, xlim = range(x), ylim = ylim, type = "n", xaxt = "n", xlab = "x", ylab = "", main = "Using matlines()" )

label <- expression( -pi, -pi / 2, 0, pi / 2, pi )
axis( side = 1, at = c(-pi, -pi / 2, 0, pi / 2, pi), label = label )
matlines( x, cbind(y1, y2, y3), col = c("red", "green", "blue"), lty = 1:3, lwd = 1:3 )
legend( "topleft", legend = c("y1", "y2", "y3"), col = c("red", "green", "blue"), lty = 1:3, lwd = 1:3 )

par(old.par)

x <- seq(from = -pi, to = pi, length = 101)
y1 <- sin(x)
y2 <- cos(x)
y3 <- sin(x) + cos(x)
ylim <- range(y1, y2, y3)

win.graph( width = 6, height = 8, pointsize = 8 )
old.par <- par( mex = 0.8, mar = c(5, 4, 3, 1) + 0.1 )

x <- seq(from = -pi, to = pi, length = 101)
y1 <- sin(x)
y2 <- cos(x)
y3 <- sin(x) + cos(x)
ylim <- range(y1, y2, y3)

win.graph( width = 8, height = 6, pointsize = 8 )
old.par <- par( mex = 0.8, mar = c(5, 4, 3, 1) + 0.1 )

plot( x, y1, xlim = range(x), ylim = ylim, type = "n", xaxt = "n", xlab = "x", ylab = "", main = "Using matpoints()" )
label <- expression( -pi, -pi / 2, 0, pi / 2, pi )
axis( side = 1, at = c(-pi, -pi / 2, 0, pi / 2, pi), label = label )
matpoints( x, cbind(y1, y2, y3), type = "l", col = c("red", "green", "blue"), lty = 1:3, lwd = 1:3 )
legend( "topleft", legend = c("y1", "y2", "y3"), col = c("red", "green", "blue"), lty = 1:3, lwd = 1:3 )

par(old.par)

win.graph( width = 8, height = 6, pointsize = 8 )
old.par <- par( mex = 0.8, mar = c(5, 4, 3, 1) + 0.1 )

plot( x, y1, xlim = range(x), ylim = ylim, type = "n", xaxt = "n", xlab = "x", ylab = "", main = "Using matlines()" )
label <- expression( -pi, -pi / 2, 0, pi / 2, pi )
axis( side = 1, at = c(-pi, -pi / 2, 0, pi / 2, pi), label = label )
matlines( x, cbind(y1, y2, y3), col = c("red", "green", "blue"), lty = 1:3, lwd = 1:3 )
legend( "topleft", legend = c("y1", "y2", "y3"), col = c("red", "green", "blue"), lty = 1:3, lwd = 1:3 )

par(old.par)

# 顏色

palette( )

windows( width = 4.5, height = 2.5, pointsize = 8 )
old.par <- par( mex = 0.8, mar = c(4, 2, 2, 2) + 0.1 )

barplot( 1:8, col = palette(), names.arg = 1:8, yaxt = "n" )
par( old.par )
n <- 10

windows( width = 5, height = 3.3, pointsize = 8 )
old.par <- par( mfrow = c(2, 3), mex = 0.6, mar = c(5, 4, 4, 2) + 0.1 )

barplot( 1:n, col = colors()[1:n], names.arg = 1:n, yaxt = "n", main = "colors" )
barplot( 1:n, col = colors()[1:n], names.arg = 1:n, yaxt = "n", main = "colors" )
barplot( 1:n, col = rainbow(n), names.arg = 1:n, yaxt = "n", main = "rainbow" )
barplot( 1:n, col = heat.colors(n), names.arg = 1:n, yaxt = "n", main = "heat.colors" )
barplot( 1:n, col = terrain.colors(n), names.arg = 1:n, yaxt = "n", main = "terrain.colors" )
barplot( 1:n, col = topo.colors(n), names.arg = 1:n, yaxt = "n", main = "topo.colors" )
barplot( 1:n, col = cm.colors(n), names.arg = 1:n, yaxt = "n", main = "cm.colors" )

# cm: cyan-magenta

par( old.par )

barplot( 1:n, col = colors()[1:n], names.arg = 1:n, yaxt = "n", main = "colors" )
barplot( 1:n, col = rainbow(n), names.arg = 1:n, yaxt = "n", main = "rainbow" )
barplot( 1:n, col = heat.colors(n), names.arg = 1:n, yaxt = "n", main = "heat.colors" )
barplot( 1:n, col = colors()[1:n], names.arg = 1:n, yaxt = "n", main = "colors" )
n <- 10

windows( width = 5, height = 3.3, pointsize = 8 )
old.par <- par( mfrow = c(2, 3), mex = 0.6, mar = c(5, 4, 4, 2) + 0.1 )

barplot( 1:n, col = colors()[1:n], names.arg = 1:n, yaxt = "n", main = "colors" )
barplot( 1:n, col = colors()[1:n], names.arg = 1:n, yaxt = "n", main = "colors" )
n <- 10

windows( width = 5, height = 3.3, pointsize = 8 )
old.par <- par( mfrow = c(2, 3), mex = 0.6, mar = c(5, 4, 4, 2) + 0.1 )

barplot( 1:n, col = colors()[1:n], names.arg = 1:n, yaxt = "n", main = "colors" )
barplot( 1:n, col = rainbow(n), names.arg = 1:n, yaxt = "n", main = "rainbow" )
barplot( 1:n, col = heat.colors(n), names.arg = 1:n, yaxt = "n", main = "heat.colors" )
barplot( 1:n, col = terrain.colors(n), names.arg = 1:n, yaxt = "n", main = "terrain.colors" )
barplot( 1:n, col = topo.colors(n), names.arg = 1:n, yaxt = "n", main = "topo.colors" )
barplot( 1:n, col = cm.colors(n), names.arg = 1:n, yaxt = "n", main = "cm.colors" )
gray.scale <- seq( from = 0, to = 1, length = 10 )

windows( width = 4.5, height = 2.5, pointsize = 8 )
old.par <- par( mex = 0.8, mar = c(4, 2, 2, 2) + 0.1 )

barplot( 1:10, col = gray(gray.scale), names.arg = 1:10, yaxt = "n", main = "gray scale" )

# From 0 (black) -> 1 (white)

par( old.par )

palette( terrain.colors(20) )  		# redefine palette
palette( )

windows( width = 2.8, height = 2.5, pointsize = 8 )
old.par <- par( mex = 0.8, mar = c(4, 2, 2, 2) + 0.1 )

barplot( 1:20, col = 1:20, names.arg = 1:20, yaxt = "n" )
par(old.par)
palette( terrain.colors(20) )  		# redefine palette
palette( )

windows( width = 2.8, height = 2.5, pointsize = 8 )
old.par <- par( mex = 0.8, mar = c(4, 2, 2, 2) + 0.1 )

plot( 1:20, pch = 16, cex = seq(from = 1, to = 10, length = 20), col = 1:20, xlab = "" )

par(old.par)
palette( "default" )  			# using default colors
palette()
colors( )				# 所有的內建顏色的指令
colors()[ grep( "pink", colors() ) ]	# 所有與粉紅色有關的指令
show.colors( )			# 展現各種內顏色的名稱與顏色

library( DAAG )			# Tools/Install Packages : DAAG
show.colors( type = "singles", order.cols = TRUE )  	# single shade
show.colors( type = "shades", order.cols = TRUE )  	# multiple shades
show.colors( type = "gray", order.cols = TRUE )  	# gray shades

windows( width = 4.5, height = 3.3, pointsize = 8 )
old.par <- par( bg = "lightyellow", col.main = "navy", col.lab = "magenta", mex = 0.8, mar = c(5, 5, 4, 3) + 0.1 )

plot( 0:10, 0:10, pch = 16, col = rainbow(10), main = "Main title", xlab = "X axis", ylab = "Y axis", axes = FALSE )

# 設定四邊的文字符號

axis( side = 1, col = "black", col.axis = "red", at = 0:10, label = LETTERS[1:11] )
axis( side = 2, col = "green", col.axis = "blue", at = seq(from = 0, to = 10, by = 1) )
axis( side = 3, col = "cyan", col.axis = "magenta", at = seq(from = 0, to = 8, by = 1) )
axis( side = 4, col = "yellow", col.axis = "gray", at = seq(from = 2, to = 10, by = 2), label = c(20, 40, 60, 80, 100) )

mtext( text = c( "Bottom", "Left", "Top", "Right" ), side = 1:4, col = 1:4, line = -2 )

par(old.par)

# 數學函數繪圖

curve( )		# 數學函數繪圖

f <- function(x)  0.01 * x^3 * cos(x) - 0.2 * x^2 * sin(x) + 0.05 * x – 1

win.graph( width = 4.5, height = 3.3, pointsize = 8 )
old.par <- par( mex = 0.8, mar = c(5, 5, 4, 2) + 0.1 )

curve( f, from = -10, to = 10 )
curve( f, from = -10, to = 10, n = 1001 )

par( old.par )

f <- function(x) 0.01 * x^3 * cos(x) - 0.2 * x^2 * sin(x) + 0.05 * x -  1

win.graph( width = 4.5, height = 3.3, pointsize = 8 )
old.par <- par( mex = 0.8, mar = c(5, 5, 4, 2) + 0.1 )

curve( f, from = -10, to = 10 )
curve( f, from = -10, to = 10, n = 1001 )

par( old.par )

f <- function(x)  0.01 * x^3 * cos(x) - 0.2 * x^2 * sin(x) + 0.05 * x - 1
g <- function(x)  10 * cos(x) * sin(x)

win.graph( width = 4.5, height = 3.3, pointsize = 8 )
old.par <- par( mex = 0.8, mar = c(5, 5, 4, 2) + 0.1 )

curve( f, from = -10, to = 10, lty = 1, col = "red", ylab = "" )
curve( g, add = TRUE, lty = 2, col = "blue" )

legend( "topright", legend = c("f", "g"), lty = 1:2, col = c("red", "blue"))

par(old.par)

f <- function(x)  0.01 * x^3 * cos(x) - 0.2 * x^2 * sin(x) + 0.05 * x - 1

win.graph( width = 4.5, height = 3.3, pointsize = 8 )
old.par <- par( mex = 0.8, mar = c(5, 5, 4, 2) + 0.1 )

curve( f, from = -10, to = 10 )
curve( f, from = -10, to = 10, n = 1001 )

par( old.par )

