视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
R语言第三课
2025-09-30 22:49:00 责编:小OO
文档
R语言绘图

   两类:一类是一般绘图,如散点图等;另一类是与统计内容有关绘图,

         如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下载本文

显示全文
专题