参考资料:学习R
1、base绘图法
base中用于绘制散点图的函数就是plot函数。plot函数会简单地忽略缺失值。如果要调用一个数据框的不同列,需要把它们包括在with函数中进行调用。
R
data("obama_vs_mccain",package="learningr")
head(obama_vs_mccain)
obama_vs_mccain<-obama_vs_mccain[!is.na(obama_vs_mccain$Turnout),]
with(obama_vs_mccain,plot(Income,Turnout))

plot函数有很多参数用于自定义输出格式。col能改变点的颜色,它可以接受任何通过colors返回的已命名颜色,或者向"#123456"的HTML风格的十六进制值。我们可以使用pch(即plot character绘制字符的缩写)来改变点的形状。
R
with(obama_vs_mccain,plot(Income,Turnout,col="violet",pch=20))

R
plot(1:25,pch=1:25,bg="blue")

我们可以通过设置log参数来设置对数坐标。log="x"表示使用x轴为对数坐标,log="y"表示使用y轴为对数坐标,而log="xy"则表示同时使用x和y轴作为对数坐标。
R
with(obama_vs_mccain,plot(Income,Turnout,log="xy"))

通过散点图,我们还可以查看数据的相关关系。layout函数可以用来控制矩阵中多个绘图区的布局。
R
par(mar=c(3,3,0.5,0.5),oma=rep.int(0,4),mgp=c(2,1,0))
regions<-levels(obama_vs_mccain$Region)
plot_numbers<-seq_along(regions)
layout(matrix(plot_numbers,ncol=5,byrow=TRUE))
for(region in regions){
regional_data<-subset(obama_vs_mccain,Region==region)
with(obama_vs_mccain,plot(Income,Turnout))
}

2、lattice图形系统
lattice版本中plot是xyplot。它使用了一个公式接口来指定x和y坐标变量。xyplot函数需要一个data参数,用这个参数告诉函数要从那个数据框中寻找变量。
R
library(lattice)
xyplot(Turnout~Income,obama_vs_mccain)

lattice很多用于改变绘图功能的选项与base系统基本相同。如下:
R
xyplot(Turnout~Income,obama_vs_mccain,pch=20,col="violet")

轴的尺度需要以不同的方式指定。lattice绘图接受一个scales参数,而且它必须是一个列表。 这个列表里的内容必须是 name = value 对,例如,log = TRUE 为 x 和 y 轴设置了对数坐标。 scales 列表还可以接受其他命名为 x 和 y 的(子) 列表参数来指定其中所需的轴的设置。如下:
R
xyplot(
Turnout~Income,
obama_vs_mccain,
scales=list(log=TRUE) # x和y轴都是对数坐标
)
xyplot(
Turnout~Income,
obama_vs_mccain,
scales=list(y=list(log=TRUE)) # y轴对数坐标
)


公式接口可以使按区域拆分数据变得更容易。我们只需要追加一个|符号和我们希望拆分的变量,这里是region。使用参数relation="same"意味着每个面板都将使用相同的轴。当参数alternating为TRUE(默认)时,每个面板上轴的刻度将在绘图区的两侧交替出现,否则只出现在左侧和底部:
R
xyplot(
Turnout~Income | Region,
obama_vs_mccain,
scales=list(
log=TRUE,
relation="same",
alternating=FALSE
),
layout=c(5,2)
)

lattice系统的另一个好处是它能把绘图存储在变量中(base只能把绘图绘制在窗口),因而可在之后更改它们。
R
lat1<-xyplot(
Turnout~Income | Region,
obama_vs_mccain
)
lat1
lat2<-update(lat1,col="violet",pch=20)
lat2


3、ggplot2图形系统
每个绘图由ggplot函数创建,它的第一个参数是一个数据框,第二参数是aesthetic。其实就是把x和y列变量传递个aes函数。然后我们再添加一个geom让图形系统显示一些点:
R
library(ggplot2)
ggplot(obama_vs_mccain,aes(Income,Turnout))+
geom_point()

ggplot2不仅能识别来自base图形系统的命令来改变点的颜色和形状,而且也有自己的一套更加可读的名称。用shape取代了pch,color取代了col
R
ggplot(obama_vs_mccain,aes(Income,Turnout))+
geom_point(col="violet",pch=20)
# 或用
ggplot(obama_vs_mccain,aes(Income,Turnout))+
geom_point(color="violet",shape=20)

为了设置一个对数坐标,我们需要为每个轴添加一个标度。break参数指定了轴刻度值得位置。它是可选的:
R
ggplot(obama_vs_mccain,aes(Income,Turnout))+
geom_point()+
scale_x_log10(breaks=seq(2e4,4e4,1e4))+
scale_y_log10(breaks=seq(50,75,5))

为了把绘图分割成不同的面板,我们添加一个切面(facet)。与lattice中的绘图类似,切面带有一个公式参数。
R
ggplot(obama_vs_mccain,aes(Income,Turnout))+
geom_point()+
scale_x_log10(breaks=seq(2e4,4e4,1e4))+
scale_y_log10(breaks=seq(50,75,5))+
facet_wrap(~Region,ncol=5)

为了将多个变量分开,我们把公式指定为类似~var1+var2+var3的形式。对于只有两个变量的特殊情况,facet_grid提供了另一种方法来分开它们,一个置于行中,而另一个置于列中。
与lattice类似,ggplot函数也可以把图形存储到变量中,然后继续在它上面添加东西。:
R
gg1<-ggplot(obama_vs_mccain,aes(Income,Turnout))+
geom_point()
gg1
gg2<-gg1+
facet_wrap(~Region,ncol=5)+
theme(axis.text.x=element_text(angle=30,hjust=1))
gg2
