两类:一类是一般绘图,如散点图等;另一类是与统计内容有关绘图,
如QQ图等。
1基本绘图函数plot():可以绘制两个变量的散点图、曲线图等。
格式:
plot(x, y=NULL, type="p", xlim=NULL, ylim=NULL, log="", main=NULL, sub=NULL, xlab=NULL, ylab=NULL, ann=par("ann"), axes=TRUE, frame.plot=axes, panel. first=NULL, panel.last=NULL,asp=NA,…)
参数x和y分别表示所绘图形横坐标和纵坐标构成的对象,
1)图形类型:参数type为所绘图形的类型,取值和类型如下:
“p”绘点(默认值);
“l”画线;
“b”同时绘点和画线;而线不穿过点;
“c”仅画参数“b”所示的线;
“o” 同时绘点和画线,且线穿过点;
“h”绘出点到横轴的竖线;
“s”绘出阶梯图(先横再纵);
“S”绘出阶梯图(先纵再横);
“n”做一幅空图,不给任何图形。
2 )图形范围
参数xlim二维向量,表示所绘图形x轴的范围;
参数ylim二维向量,表示所绘图形y轴的范围;
参数log“x”或“y”,表示对x轴或对y轴的数据取对数;“xy”或“yx”表示对x轴与对y轴的数据同时取对数。
3) 图题及坐标轴
参数main字符串,描述图形的标题;
参数sub字符串,描述图形的副标题;
参数xlab字符串, 描述x轴的标签,默认值为对象名;
参数ylab字符串, 描述y轴的标签,默认值为对象名;
4 )示例(数据在tingcar.txt文件里)
如: #speed车速(mile/h), dist制动距离(dt),1mile=1.6km,1df=0.3m.
rt<-read.table("tingcar.txt")
plot(rt$speed,rt$dist, type="o", xlab= "speed",ylab="dist" ,
main = "type = o", xlim=c(1,30),ylim=c(1,125))
2 pairs():可以绘制多个变量的散点图,并以阵列形式排列, 只能看到两项关系。
格式:pairs(formula,data=NULL,…), 参数formula表示公式,形如“~x+y+z”;
data数据框,表示多变量的数据。
例
df<-data.frame(
Age=c(13, 13, 14, 12, 12, 15, 11, 15, 14, 14, 14, 15, 12,
13, 12, 16, 12, 11, 15 ),
Height=c(144, 166, 163, 143, 152, 169, 130, 159, 160, 175,
161, 170, 146, 159, 150, 183, 165, 146, 169),
Weight=c(38.1, 44.5, 40.8, 34.9, 38.3, 50.8, 22.9, 51.0,
46.5, 51.0, 46.5, 60.3, 37.7, 38.1, 45.1, 68.0,
58.1, 38.6, 50.8)
)
pairs(df)
或 pairs(~ Age + Height + Weight, data=df) ########结果一样
3协同图coplot():可以绘制多个变量的散点图,需看到三项或四项关系.
格式:coplot(formula,data,panel=points, …), 参数formula表示公式,形如:“y~x | a”表示单个条件变量,形如:“y~x | a*b”表示两个条件变量,data数据框,panel函数,绘制面板数据方法,默认值points。
例:(上面的例子)coplot(Weight ~ Height | Age, data=df)
4点图dotchart():是检测离群值的优秀工具。
格式:dotchart(x,…), x代表向量或矩阵,即点图的数据;
例:dotchart(VADeaths, main="Death Rates in Virginia")
## VADeaths数据集(R自带)是弗吉尼亚州在1940年人口死亡率(1/1000)
5饼图pie():将圆形划分为几个扇形的统计表,用于描述量、频率、或百分比之间的关系。
格式:pie(x,labels=names(x),edges=200,radius=0.8,clockwise=FALSE,init.angel=if(clockwise) 90 else 0,density=NULL, angle=45,col=NULL, border=NULL, lty=NULL, main=NULL,…)
x 向量,分量为非负值,描述饼图中的扇形面积或扇形面积的比例;
labels 表达式或字符串,描述途中扇形的名称,默认值“names(x)”;
edges 正整数,描述近似圆的多边形的边数;
radius 数值,饼图半径,默认值0.8;
clockwise 逻辑变量,默认值FALSE(逆时针),TRUE(顺时针);
init.angle数值,描述饼图开始的角度,逆时针的默认值为0度(即3点位置),顺时针的默认值为90度(即12点位置);
density 正整数,阴影线条的密度,表示每英寸的线条的个数;
angle 数值或向量,描述扇形阴影线条倾斜的角度。
例 欧洲2004年议会选举的初步结果,给出数据的饼图:
pie.sales <-c(39, 200, 42, 15, 67, 276, 27, 66)
names(pie.sales) <- c("EUL", "PES", "EFA", "EDD", "ELDR", "EPP", "UNE", "other")
pie(pie.sales, radius = 0.9, main = "Ordinary chart")
6 条形图barplot(): 以长方形的长度为统计变量的矩形图表,在统计图中应用最广。
格式:
barplot(height,width=1,space=NULL, legend.text=NULL, beside=FALSE,
horiz=FALSE, names.arg=NULL,…)
height 向量或矩阵,描述条形的长度;
width 数值或向量,描述条形的宽度,默认值为1;
space 数值,描述条形之间的空白的宽度,默认值为NULL;
legend.text 字符串,图例说明,当height为矩阵时,较为有用;
beside 逻辑变量,FALSE(默认值)为重叠,TRUE为平行排列;
horiz逻辑变量,FALSE(默认值)为竖条,TRUE为横条。
例 所用数据为欧洲议会选举和弗吉尼亚州人口1940年死亡率
par(mai=c(0.9, 0.9, 0.3, 0.3)) ####par( )的意义见11页(图形参数介绍)
## figure 1
pie.sales <-c(39, 200, 42, 15, 67, 276, 27, 66)
names(pie.sales) <- c("EUL", "PES", "EFA", "EDD", "ELDR", "EPP", "UNE", "other")
r<-barplot(pie.sales, space=1, col=rainbow(8))
###rainbow( )函数是创作一个连续颜色的向量,赋给代表颜色的变量col ,如:col=rainbow(8)
## figure 2
barplot(VADeaths, space = 0.5,
col = c("lightblue", "mistyrose", "lightcyan",
"lavender", "cornsilk"))
## figure3
barplot(VADeaths, beside = TRUE,
col = c("lightblue", "mistyrose", "lightcyan", "lavender", "cornsilk"),
legend = rownames(VADeaths), ylim = c(0, 100))
savePlot(filename = "barplot_L", type = "jpg")
#######储存图形在文件名为barplot_L里的,格式是形式
7 直方图hist():柱状图或质量分布图,是一种统计报告图,展示连续数据分布的常用工具,用来估计数据的概率分布。
格式:hist(x,breaks=”Sturges”,freq=NULL,border=NULL,labels=FALSE, …)
x 向量,直方图的数据;
breaks 数值,向量或字符串,描述直方图的断点;
freq 逻辑变量,TRUE为频数,FALSE为密度;
border 数字或字符串,描述直方外框的颜色;
labels逻辑变量,默认值为FALSE,当取值为TRUE时,表示标出频度或密度。
例 对学生身高作直方图
## figure 1
df<-data.frame(
Age=c(13, 13, 14, 12, 12, 15, 11, 15, 14, 14, 14, 15, 12,
13, 12, 16, 12, 11, 15 ),
Height=c(144, 166, 163, 143, 152, 169, 130, 159, 160, 175,
161, 170, 146, 159, 150, 183, 165, 146, 169),
Weight=c(38.1, 44.5, 40.8, 34.9, 38.3, 50.8, 22.9, 51.0,
46.5, 51.0, 46.5, 60.3, 37.7, 38.1, 45.1, 68.0,
58.1, 38.6, 50.8)
)
hist(df$Height, col="lightblue", border="red", labels = TRUE, ylim=c(0, 7.2))
也可以写成:
attach(df)
hist(Height, col="lightblue", border="red", labels = TRUE, ylim=c(0, 7.2))
#####attach()函数把数据框中的数据连接到内存中,便于数据框中的数据调用。
savePlot(filename = "hist_a", type = "eps")
8 箱线图boxplot():从四分位数的角度来描述数据的分布,它通过上边缘、上四分位数(Q3)、中位数(Q2)、下四分位数(Q1)和下边缘组成,可能还包括异常值点(超过上下边缘的点)来描述数据。
注:下四分位数(Q1):该样本所有数值由小到大排列后第25%的数字;上四分位数(Q3):该样本所有数值由小到大排列后第75%的数字;中位数(Q2):该样本所有数值由小到大排列后第50%的数字;四分位距:上四分位数(Q3)与下四分位数的差距。
格式:
基本方法: boxplot(formula,data=NULL,…,subset,na.action=NULL)
默认方法:boxplot(x,…,range=1.5,width=NULL,varwidth=FALSE,notch=FALSE,outline=TRUE,names,plot=TRUE,border=par(“fg”),col=NULL,log=””,pars=list(boxwex=0.8,staplewex=0.5,ooutwex=0.5),horizontal=FALSE,add=FALSE,atNULLdata=NULL,…,subset,na.action=NULL)
X 向量,列表或数据框;
formula 公式,形如y~grp,其中y为向量,grp是数据的分组,通常为因子;
data 数据框,提供数据;
range 数值,默认值为1.5,表示“触须”的范围,即range×(Q3- Q1) ;
notch 逻辑变量,默认值为FALSE,当取值为TRUE时,画出的箱线图带有凹槽;
outline 逻辑变量,默认值为TRUE,当取值为FALSE时,表明不标明异常值点;
col数值或字符串,表示箱线图的颜色;
horizontal逻辑变量,默认值为FALSE, 当取值为TRUE时,表示将箱线图绘成水平状。
例 考察两样本均值是否相同
Figure(1)
A<-c(79.98, 80.04, 80.02, 80.04, 80.03, 80.03, 80.04,79.97, 80.05, 80.03, 80.02, 80.00, 80.02)
B<-c(80.02, 79.94, 79.98, 79.97, 79.97, 80.03, 79.95,79.97)
boxplot(A, B, names=c('A', 'B'), col=c(2,3))
##########c(2,3):表示箱线图的颜色为红色和绿色,1黑色,2红色,3绿色,#########4 蓝色,也可写成c(‘red’,‘green’)
savePlot(filename="box_plot1", type="eps")
Figure(2): R中的数据集InsectSprays数据框,共两列,count(列名)昆虫数目,spray(列名)杀虫剂类型(共6种),昆虫数目在6种杀虫剂类型下的数目。
boxplot(count ~ spray, data = InsectSprays, col = "lightgray")
boxplot(count ~ spray, data = InsectSprays,notch = TRUE, col = 2:7, add = TRUE) #####add意义见12页(图形参数介绍),与上面图一起画
9 Q-Q图:是一种散点图,正态分布的散点图是分位数为横坐标,样本值为纵坐标的散点图,可辨别样本数据是否为正态分布。
qqnorm():绘出数据的正态Q-Q图,qqline()在Q-Q图上增加一条理论直线,qqplot()绘出数据集的Q-Q图。
格式:
qqnorm(y,ylim,main=”Normal Q-Q Plot”,xlab=” Quantiles”,ylab=”Sample Quantiles”,plot.it=TRUE,datax=FALSE,…)
qqline(y, datax=FALSE, distribution=qnorm, probs=c(0.25,0.75), qtype=7,…)
qqplot(x,y, plot.it=TRUE, xlab=deparse(substitute(x)), tlab=deparse(substitute(y)), …)
参数意义:
x 向量,表示第1组样本的数据,仅用于qqplot()函数;
y向量,表示第2组样本的数据,或仅表示样本的数据;
main 字符串,表示图题;
xlab,ylab 字符串,分别表示x轴和y轴的标签;
plot.it 逻辑变量,TRUE(默认值)绘图;FALSE为不绘图。
例 绘出身高体重的正态分布Q-Q图
df<-data.frame(
Age=c(13, 13, 14, 12, 12, 15, 11, 15, 14, 14, 14, 15, 12,
13, 12, 16, 12, 11, 15 ),
Height=c(144, 166, 163, 143, 152, 169, 130, 159, 160, 175,
161, 170, 146, 159, 150, 183, 165, 146, 169),
Weight=c(38.1, 44.5, 40.8, 34.9, 38.3, 50.8, 22.9, 51.0,
46.5, 51.0, 46.5, 60.3, 37.7, 38.1, 45.1, 68.0,
58.1, 38.6, 50.8)
)
attach(df)
qqnorm(Weight); qqline(Weight)
qqnorm(Height); qqline(Height)
detach()
savePlot(filename="Q-Q_plot2", type="eps")
10 三维透视图persp():
格式:
persp(x=seq(0,1,length.out=nrow(z)),y=seq(0,1,length.out=ncol(z)),z, xlim=range(x), xylim=range(y), zlim=range(z,na.rm=TRUE),
xlab=NULL,ylab=NULL,zlab=NULL,main= NULL,sub= NULL, theta=0,phi=15, r=sqrt(3),d=1, scale=TRUE, expand=1, col=”white”, border=NULL,
ltheta=-135, lphi=0,shade=NA, box=TRUE, axes=TRUE, nticks=5,
ticktype=”simple”,…)
参数意义:
x,y 数值型向量,分别表示x轴和y轴的取值范围;
z 矩阵,由x和y根据所绘图形函数关系生成;
theta,phi 数值,分别表示图形的观察角度和 ;
expand 数值,扩展或缩小的比例,默认值为1。
例 在[-7.5,7.5]×[-7.5,7.5]的正方形区域内绘出函数的三维透视图。
解
y <- x <- seq(-7.5, 7.5, by = 0.5)
f <- function(x,y) {
r <- sqrt(x^2+y^2) + 2^{-52}
#########加一个很小量2^{-52}避免下行运算分母为0
z <- sin(r)/r
}
z <- outer(x, y, f) ##### z需要在函数f关系下做外积运算(outer(x, y, f)),
###########形成网格,才能绘出三维透视图
par(mai=c(0.0, 0.2, 0.0, 0.1))
persp(x, y, z, theta = 30, phi = 15, expand = .7, col = "lightblue", xlab = "X", ylab = "Y", zlab = "Z")
savePlot(filename = "sinc", type = "eps")
11 等值线contour():绘出三维图形的等值线。
格式:contour(x=seq(0,1,length.out=nrow(z)), y=seq(0,1,length.out=ncol(z)),z, nlevels=10,levels=pretty(zlim,nlevels),labels=NULL,xlim=range(x,finite=TRUE),
ylim=range(y, finite=TRUE), zlim=range(z, finite=TRUE), labcex=0.6, drawlabels=TRUE, method=”flattest”,vfont, axes=TRUE, frame.plot=axes,
col=par(“fg”), lty=par(“lty”), lwd=par(“lwd”),add=FALSE,…)
参数意义:
x,y 数值型向量,分别表示x轴和y轴的取值范围;
z 矩阵,由x和y根据所绘图形函数关系生成;
nlevels 整数,表示等值线的条数;
levels 数值向量,描述所绘等值线的值。
例 在[-3,3] ×[-3,3]的的正方形区域内绘出函数,其中等值线的值分别为-6.5,-5.75,…,7.75
解
y <- x <- seq(-3, 3, by = 0.125)
f <- function(x,y) {
z <- 3*(1-x)^2*exp(-x^2 - (y+1)^2) -10*(x/5 - x^3 - y^5)*exp(-x^2-y^2) -
1/3*exp(-(x+1)^2 - y^2)
}
z <- outer(x, y, f)
par(mai=c(0.8, 0.8, 0.2, 0.2))
contour(x, y, z,
levels = seq(-6.5, 7.75, by = 0.75),
xlab = "X", ylab = "Y", col = "blue")
savePlot(filename = "peaks", type = "eps")
……………………………………………完…………………………………………
一、图形参数介绍
1 图中的逻辑参数
add=TRUE表示新绘图形与已有图形的叠加,add=FALSE表示新绘图形替换已有图形。
axes=TRUE(默认值)表示在绘图形时添加坐标轴,axes=FALSE表示所绘图形没有坐标轴。
2 对数据取对数
log=”x”、log=”y”、 log=”xy”分别表示对x轴、y轴、xy轴同时取对数;
3图中字符串
main=图形标题
sub=图形副标题
xlab=x轴标题
ylab=y轴标题
zlab=z轴标题
二、图形参数的永久设置
par()用来访问或修改当前图形设备的图形参数,如par(c(“col”,”lty”)),表示修改图形中的col和lty参数。
oldpar<-par(col=4,lty=2) ########修改参数
par(oldpar) #######完成任务后,恢复原参数值
三、图形元素控制
1 规定图中点的形状:默认情况下,点由空心圆组成,若改变形状,用参数pch=k完成k可以是0~25个数中的某个,或特定字符。如pch=3(表示点用“+”形状),见下图:
2规定图中线的类型:lty=k, k用数字表示线的类型,1(默认值)表示实线,从2开始表示各种类型的虚线。
3规定图中线的宽度:lwd=k, k为数值,表示线的宽度,1(默认值)表示标准宽度,其它值表示标准宽度的倍数,它影响lines()函数绘线宽度,及坐标轴的线宽。
4 规定图中点、线、文本、填充区域的颜色:col=k , ( 规定点、线、文本颜色);bg=k, ( 规定填充区域的颜色), k可以是数值,用1~8分别表示黑、红、绿、蓝、青、深红、黄和灰;也可用字符串描述颜色:“black”, “red”, “green”, “blue”, “cyan”, “magenta”, “yellow”, “gray”。用palette()函数给出颜色的数值,用colors()函数给出颜色的名称。
5 规定图中字体类型:font=k, k为数字,表示字体类型,1,2,3,4分别表示正体、黑体、斜体、黑斜体。用font.axis, font.lab , font.main, font.sub分别规定坐标刻度、坐标轴标签、标题、副标题所用的字体类型。
6 图中文本对齐的方式:adj=k, k为数值,表示对齐的方式,0表示左对齐,1表示右对齐,0.5表示居中。
7 图中字符的放大倍数:cex=k, k为数值,表示放大倍数。cex.axis, cex.lab , cex.main, cex.sub分别规定坐标轴的注释、坐标轴标记、标题、副标题所用的字符放大倍数。
……………………………………完……………………………………..
图形精加工
低水平图形函数
1 在原有图上添加点:points()
points(x, y = NULL, type = "p", ...)
参数:x,y数值向量,表示点的坐标;type 字符串,表示类型;...附加参数。
2 添加文字或符号:
text(x, y = NULL, labels = seq_along(x), adj = NULL, pos = NULL, offset = 0.5, vfont = NULL, cex = 1, col = NULL, font = NULL, ...)
参数:x,y 数值向量,表示添加文字处的坐标;labels 数值型或字符型向量,表示需要添加的文字或符号;adj 表示[0,1] 区间的值,一个或两个,描述文字调整的位置;pos数字或NULL(默认值),1,2,3,4分别表示原始位置的下、左、上、右位置;cex数值,默认值为1,表示字体大小。
3 添加线
line(x, y = NULL, type=”p”, ...)
x,y 数值向量,表示点的坐标;
type 字符串,表示类型;
… 附加参数。
4 添加线段:
segments(x0, y0, x1 = x0, y1 = y0, col = par("fg"), lty = par("lty"), lwd = par("lwd"), ...)
x0, y0数值向量,表示线段的起点坐标,x1 , y1数值向量,表示线段的终点坐标。
5 添加数学符号或数学表达式
expression( )与text( )结合使用,数学符号或数学表达式可由expression( )函数来引导,作为字符串可嵌入到text( )中使用。如:
text(x,y, expression(paste(“(“,…,”)“) )
6 添加图例
图例是图形的说明
legend(x, y = NULL, legend, fill = NULL, col = par("col"),
border = "black", lty, lwd, pch,
angle = 45, density = NULL, bty = "o", bg = par("bg"),
box.lwd = par("lwd"), box.lty = par("lty"), box.col = par("fg"),
pt.bg = NA, cex = 1, pt.cex = cex, pt.lwd = lwd,
xjust = 0, yjust = 1, x.intersp = 1, y.intersp = 1,
adj = c(0, 0.5), text.width = NULL, text.col = par("col"),
text.font = NULL, merge = do.lines && has.pch, trace = FALSE,
plot = TRUE, ncol = 1, horiz = FALSE, title = NULL,
inset = 0, xpd, title.col = text.col, title.adj = 0.5,
seg.len = 2)
参数:
x,y 数值,表示放置图例的位置坐标;
legend字符串或者表达式,表示图例的内容;
col描述颜色的数字或字符串,表示边界颜色;
lty,lwd数字,描述图例中线的类型与宽度;
pch数字,描述图例中符号的类型。
7 设置多图环境
mfrow,mfcol可设置多图环境,par(mfrow=c(2,3)),表示2行3列共6个图,次序按行填放,par(mfcol=c(2,3)),次序按列填放。
8 设置图形外边空
mai, mar规定图形外边空大小, mai以英寸为单位,mar以文本行高为单位。omi或oma规定子图形的外边空大小,omi以英寸为单位,oma以文本行高为单位。如mar=c(2,2,3,1), 从“下->左->上->右”设置图外边空
9叠加新图
par(new=TRUE)
例1
rt<-read.table("tingcar.txt")
##op <- par(mai=c(.9, .9, .5, 0.5), cex=1.1) ###修改图边儿宽、缩放图
plot(rt$speed,rt$dist, type="o", xlab= "speed",ylab="dist" , main = "type = o",
xlim=c(1,30),ylim=c(1,125))
#### 加线段
x0 <- rt$speed[4]; y0 <- rt$dist[4]
segments(x0-0.0001, y0+0.0001, x1 = 5, y1 =40, col= 1,lty=3, lwd=2)
#### 加符号
expr<-expression(paste("(", x[i],
text(5, 40+5, expr)
#### 加图例
expr1<-expression(paste("离散点"))
legend(5,100,legend=expr1,col=c("blue"),pch=c("o"))
###par(op) ##修改后复原
.................................................................................完.......................................
例2
x<-1:12
y1 <- c(35, 40, 40, 42, 37, 45, 43, 37, 44, 42, 41, 39) # 输入体重数据
y2 <- c(60, 74, , 71, 72, 68, 78, 66, 70, 65, 73, 75) # 输入胸围数据
plot(x,y1,type="l", col="blue",ylim=c(20,80))
par(new=TRUE) ##叠加新图
plot(x,y2, type="l",lty=2,col="green", ylim=c(20,80))
expr1<-expression(paste("胸围"))
expr2<-expression(paste("体重"))
legend(1,57,legend=c(expr1, expr2),col=c("green下载本文