R软件基础2

一、自定义绘图

#1初级绘图

oldpar=par(pin=c(5,2),mai=c(0.6,0.6,0.6,0.1))#设置图的尺寸宽5高2和边界,单位:英寸
plot(1:10,1:10,type='n',main='主标题',sub='副标题',xlab='',ylab='',
     xlim=c(0,15),ylim=c(0,10),frame.plot=TRUE,axes=FALSE,
     mgp=c(2.3,1,0),cex.main=1,cex.sub=0.8)
#plot(x=x轴数据,y=y轴数据,main="标题",sub="子标题",type="线型(p点,l线,o点或线)",
#xlab="x轴名称",ylab="y轴名称",xlim = c(x轴范围,x轴范围),ylim = c(y轴范围,y轴范围)
#cex.main 标题的缩放倍数。类似于cex;cex.sub 副标题的缩放倍数。类似于cex,
#axes=FALSE表示plot不自动生成x,y坐标轴,frame.plot=TRUE需要画作图区域的框线
#mgp默认值为c(3, 1, 0),三个数字分别代表坐标轴标题、刻度值和轴线与绘图边框的距离;)
lines(c(1,11),c(8,8),lty=2)
lines(c(1,11),c(6,6),lty=3)
lines(c(1,11),c(4,4),lty=1)
#指定位置输出图例
legend(12.5,10,c("线1","线2","线3"),lty=c(2,3,1),cex=0.75)
#x坐标轴(1,2,3,4分别表示底部,左侧,顶部,右侧)
axis(1,0:15,labels = 0:15,cex=0.75,padj = -0.5)
#y坐标轴,padi表示label偏离刻度线的大致距离
axis(2,0:10,labels = 0:10,cex=0.75,padj = 0.5)
#x轴标签右对齐
title(xlab = 'x轴标签',adj=1,mgp=c(2.0,1,0),cex=0.75)
#y轴标签右对齐
title(ylab = 'y轴标签',adj=1,mgp=c(2.0,1,0),cex=0.75)
#在图形指定位置输出文本
text(7,3,'四周边线以内:作图区域')
text(7,2,'四周边线以外:四个边距')
par(oldpar)

#2旋转文本输出 text
par(mai=c(0,0,0,0))
plot(-10:10,-10:10,type='n',main='',sub='',xlab='',ylab='',axes=FALSE)
for (i in 1:12) {
  text(0,0,srt=i*30,'统计软件R',adj=1.25,cex=0.85)#产生左侧图
}
plot(-10:10,-10:10,type='n',main='',sub='',xlab='',ylab='',axes=FALSE)
for (i in 1:12) {
  text(0,0,srt=i*30,'统计软件R',adj=1.25,cex=0.85)#产生右侧图
}

#3在作图区域外输出文本metext
#side表示文本方位,1,2,3,4对应下边,左边,上边和右边
#adj表示对齐方式,0,0.5,1分别对应左对齐,居中和右对齐
#line表示字符间距
plot(1:100)
metext("right margin",side=4,adj=0.5,line=0.5)
metext("top margin",side=3,adj=0,line=1)


#4常规几何平面图
par(mai=c(0.1,0.1,0.1,0.1))#设置图的边界,单位:英寸
plot(-1:1,type='n',main='',sub='',xlim=c(-1,1.2),ylim=c(-0.2,2.5),
     frame.plot=FALSE,axes=FALSE,cex.sub=1,xlab = '',ylab = '',
     mgp=c(0.1,0.05,0))

axis(1,at=seq(-1,1),labels = seq(-1,1),pos=0,hadj=1.5,mgp=c(0.6,0.05,0))
axis(2,seq(1,2),labels = seq(1,2),pos=0,mgp=c(0.6,0.4,0),hadj = 1,las=1)
#h为水平线的y值,v为垂直线的x值
abline(h=0); abline(v=0);lines(c(-1,0),c(0,2));
text(-0.7,1.5,'y=2x+2');text(-0.2,2.4,'y');text(1.2,-0.2,'x')
arrows(0,2.2,0,2.5,length = 0.08);arrows(0.8,0,1.2,0,length = 0.08)

#5为图形添加网格线
x=seq(-pi,pi,by=0.1)
#nx/ny表示在x,y方向上的单元格数
plot(x,sin(x),type='l')
grid(nx=4,ny=6,lwd=1,col = 'red')

#6数学标注
x=seq(-pi,pi,by=0.1)
plot(x,sin(x^2)+exp(0.1*x),type='l',main='',ylab='')
title(main = expression(y==sin(x^2)+e^(0.1*x)))

#7指定图形窗口尺寸
win.graph(width = 5,height = 3,pointsize = 8)
plot(1:10,11:20)
#8打开新的图形窗口
for(i in 1:5) dev.new()#产生一个图形设备
dev.list(); dev.cur();
#dev.list()列出所有图形设备编号,dev.cur()获取当前图形设备编号
dev.set(2);plot(1:10);dev.cur();dev.off()
graphics.off()

二、高级绘图

1常用绘图函数

#1常用绘图函数
#plot(f) f如果是因子,则产生直方图
f=as.factor(rbinom(40,9,0.5))
plot(f)
#plot(f) f如果是数据框,则产生散点图
df=data.frame(x=rnorm(10),y=rt(10,5),z=rnorm(10,2,4))
plot(df)

#coplot(expr,data=df)用来显示多元数据之间的条件散点图
#df是数据框变量或者矩阵
df=data.frame(hei=rnorm(50,130,10),wei=rnorm(50,30,9),
              grade=as.factor(sample(3:6,50,replace = TRUE)),
              class=as.factor(sample(1:3,50,replace = TRUE)))
coplot(wei~hei|grade,data=df)
coplot(wei~hei|grade+class,data=df)

#dotchart(x,...)将绘制数值矩阵x的特殊点图,y轴显示矩阵的行标题
#x轴显示矩阵每列的数值,按列的顺序从左到右,将各列散点图自上而下地绘制到分列点图中
#这个图形特别适合相同分类指标的多组数据的直观比较
#构造一个具有4个指标的6组数据,指标名为A,B,C,D,数据名为group1~group6
n=4
mat=cbind(group1=rnorm(n,80,9),group2=rnorm(n,90,9),
          group3=rnorm(n,70,4),group4=rnorm(n,85,2),
          group5=rnorm(n,95,3),group6=rnorm(n,75,4))
rownames(mat)=c('A','B','C','D');
dotchart(mat)

2条形图


#2条形图
# barplot(height, width = 1, space = NULL,
#         names.arg = NULL, legend.text = NULL, beside = FALSE,
#         horiz = FALSE, density = NULL, angle = 45,
#         col = NULL, border = par("fg"),
#         main = NULL, sub = NULL, xlab = NULL, ylab = NULL,
#         xlim = NULL, ylim = NULL, xpd = TRUE, log = "",
#         axes = TRUE, axisnames = TRUE,
#         cex.axis = par("cex.axis"), cex.names = par("cex.axis"),
#         inside = TRUE, plot = TRUE, axis.lty = 0, offset = 0,
#         add = FALSE, args.legend = NULL, ...)
# density:底纹的密度。默认值为NULL。
# angle:设置底纹的斜率。
# xlim和ylim:设置图形x轴与y轴的范围。
# xlab和ylab:设置x轴与y轴的lable。
# axes:逻辑参数。设置图形是否显示x轴或y轴。
# plot:逻辑参数。设置是否显示条形图。
# beside:逻辑参数。如果FALSE,那么将绘画堆叠式的条形;如果是TRUE,将绘画并列式条形。
# cex.axis:设置坐标轴数值的膨胀率。比如cex.axis=1.5。
# cex.names:设置条形标签(bar labels)的膨胀率。比如cex.axis=1.5.
# col:设置条形底纹或者填充颜色。
# border:设置条形边缘颜色。如果设置为NA,则消除了边缘。
# width:设置条形的宽度。
# axis.lty:设置x轴的类型(类似lty)。默认axis.lty=0.
# names.arg:设置条形标签(bar labels)。
# horiz:逻辑参数。设置图形是水平或是垂直。
# space:设置各个条形间的宽度。相当于各个条形宽度的一部分。
# axisnames:逻辑参数。设置是否显示条形标签。
# 实例演习:
# 使用R软件自带数据VADeaths
#低维数据的条形图绘制
d=rbinom(20,10,0.4)
barplot(table(d),main = 'barplot(table(d))')

#多维数据的条形图绘制
barplot(VADeaths,beside = TRUE,main = 'beside=TRUE')
barplot(VADeaths,main = 'beside=FALSE')

3箱线图

#3箱线图
#一维箱线图
X=rnorm(100);#horizontal表示是否水平绘制,notch表示是否绘制切口形状
boxplot(X)
boxplot(X,horizontal = TRUE)
boxplot(X,notch=TRUE)

#多维数据的箱线图
x=matrix(rnorm(100),ncol=4)
boxplot(x)
boxplot(x,horizontal=TRUE)

4三维图形显示

#4三维图形显示
outer(1:3,1:8,FUN="*")#外积运算
outer(1:3,1:8,function(x,y) 0.5*x*y) #自定义函数
# > outer(1:3,1:8,FUN="*")#外积运算
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
# [1,]    1    2    3    4    5    6    7    8
# [2,]    2    4    6    8   10   12   14   16
# [3,]    3    6    9   12   15   18   21   24
# > outer(1:3,1:8,function(x,y) 0.5*x*y) #自定义函数
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
# [1,]  0.5    1  1.5    2  2.5    3  3.5    4
# [2,]  1.0    2  3.0    4  5.0    6  7.0    8
# [3,]  1.5    3  4.5    6  7.5    9 10.5   12
#利用数据集中的volcano数据绘制image图形
image(t(volcano)[ncol(volcano):1,])#彩色
image(t(volcano)[ncol(volcano):1,],col=grey((0:32)/32))#灰色

#画等高线图
x=-6:16
contour(outer(x,x),method="edge",vfont=c("sans serif","plain"))

#3D曲面图
x=seq(-3,3,by=0.2)
z=outer(x,x,FUN=function(x,y) exp(-(x^2+y^2)/2)/(2*pi))#二维正态密度图
persp(x,x,z,theta = 30,phi=5,expand = 0.7)

#3D散点图, 以软件包scatterplot3d中的scatterplot3d()函数为例
attach(mtcars)
scatterplot3d(wt,disp,mpg,main='简单3D散点图')

#对scatterplot3d增加highlight.3d,type,pch等参数,还可以增加回归超平面,使得图形更加直观
par(mfrow=c(1,3))#一个图版显示1行3列  
# 其中,通过设定函数par()的各个参数来调整图形
# mfrow=c(2,2) 是画4幅图,
# mfrow=c(3,5),是画15幅图,
# 例如 par(mfrow=c(2,3)) 一个图版显示2行,3列
scatterplot3d(wt,disp,mpg,highlight.3d=TRUE,type='h',main='简单3D散点图')
scatterplot3d(wt,disp,mpg,highlight.3d=TRUE,type='h',pch=16,main='简单3D散点图')
my3d=scatterplot3d(wt,disp,mpg,highlight.3d=TRUE,type='h',pch=16,main='简单3D散点图')
fit=lm(mpg~wt+disp)
my3d$plane3d(fit)

#可以任意旋转的3D图
#软件包rgl可以将三维数据以3D形式展示,使用鼠标可以任意旋转3D图像
#实现空间数据的全方位透视
#主要使用plot3d()函数
f=function(x,y){ r<-sqrt(x^2+y^2);ifelse(r==0,10,10*sin(r)/r)}
open3d()
plot3d(f,col=colorRampPalette(c("blue","white","red")),xlab="X",
       ylab = "Y",zlab = "Sinc(r)",xlim = c(-10,10),ylim = c(-10,10),aspect = c(1,1,0.5))

5 lattice软件包,提供的函数适用于多变量数据集绘图

#histogram(~x|y)函数绘制y分类的x直方图

histogram(~iris[,1]|iris[,5],layout=c(3,1))

 

 

 

X=sample(c('A','B','C'),size = 150,replace = TRUE)
#bwplot绘制分组箱线图
bwplot(iris[,5]~iris[,1]|X,layout=c(3,1))

 

#xyplot绘制二元图
#auto.key = list(corner=c(1,1)表示图例放置在右上角
#type=c('p','smooth')指定图的类型,p表示散点,smooth表示光滑曲线
#groups指定分组变量
xyplot(iris[,2]~iris[,1],auto.key = list(corner=c(1,1)),
       type=c('p','smooth'),groups = iris[,5])

 

三、多图及特殊图形

 

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小夏天禧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值