【R语言学习笔记】11、R如何画图之二

1. 次要刻度线

注意,我们最近创建的图形都只拥有主刻度线,却没有次要刻度线。要创建次要刻度线,你需要使用Hmisc包中的minor.tick()函数。如果你尚未安装Hmisc包,请先安装它(install.packages("Hmisc"))。安装后,要先导入该包,然后才能使用minor.tick()函数,代码格式如下:

library(Hmisc)
minor.tick(nx=n,ny=n,tick.ration=n)

其中,minor.tick(nx=n,ny=n,tick.ration=n)中的参数1nx的值是将x轴的每个主刻度线之间被等分为n个次刻度线。ny是对y轴进行处理,参数3tick.ration的值是指定次刻度线是主刻度线长度的倍数,如为tick.ration=0.5时次刻度线是主刻度线的一半。
示例:

plot(1:4, 1:4, type = "b")
> minor.tick(nx=3, ny=2, tick.ratio = 0.5)

生成的效果如下图:(x轴每个刻度被分为3份,y轴每个刻度被分为2份,且次刻度线是主刻度线的一半)
在这里插入图片描述

2. 参考线

函数abline()可以用来为图形添加参考线:abline(h=yvalues, v=xvalues),其中参数1h是水平参考线,参数2v是垂直参考线。即yvalues是垂直y轴,落脚点是y轴的yvalues值处,xvalues是垂直x轴,落脚点是x轴的xvalues值处,

函数abline()中也可以指定其他图形参数(如线条类型、颜色和宽度)。举例来说:abline(h=c(1,5,7), col="red", lty="2")在y轴值为1、5、7的位置处添加了水平红色虚线。
abline(v=2, col="blue", lty="1")在x轴值为2的位置处添加了垂直蓝色实线。

3. 图例

当图形中包含的数据不止一组时,图例可以帮助你辨别出每个条形、扇形区域或折线各代表哪一类数据。
我们可以使用函数legend()来添加。
格式是:legend(location , title , legend ,...)
在这里插入图片描述

4. 文本标注

添加文本标注可以用text()mtext()两个函数。可以给图中的点进行标注说明。
text()可向绘图区域内部添加文本,
mtext()则向图形的四个边界之一添加文本。
格式如下:
在这里插入图片描述

举例

dose <- c(20,30,40,45,60)
drugA <- c(16,20,27,40,60)
drugB <- c(15,18,25,31,40)

opar = par(no.readonly=TRUE)
par(lwd=2, cex=1.5, font.lab=2)
 
plot(dose, drugA, type="b",pch=15, lty=1, col="red", xlim=c(10,60), ylim = c(10,70), main="A和B对比", yaxt="n")
axis(2, at=c(10, 20,30, 40, 50, 60, 70), labels = c(10, 20,30, 40, 50, 60, 70), col.axis="red", las=2, cex.axis=.7)
lines(dose , drugB,type="b",pch=17, lty=2,col="blue", xlim=c(10,60), ylim = c(10,70) )
axis(4, at=c(10, 20,30, 40, 50, 60, 70), labels = c(10, 20,30, 40, 50, 60, 70), col.axis="blue", las=2, cex.axis=.7)
abline(h=c(30), col="gray")
 
legend("topleft",inset=.05, title="Drug Type" ,c("A", "B"), cex=0.5, col=c("red","blue"), lty=c(1,2), pch = c(15,17))
text(dose, drugA,"A", cex=0.8, pos=3, col="red")
text(dose, drugB,"B", cex=0.8, pos=1, col="blue")

效果如下:
在这里插入图片描述

5. 图形的组合

1. par()函数和mfrow()参数

attach(mtcars) #绑该数据集。
par(mfrow=c(2,2)) #希望我的画布为两行两列
plot(wt, mpg, main = "wt vs mpg")
plot(wt, disp, main="wt vs disp")
hist(wt, main = "Histogram of wt") #柱状图
boxplot(wt, main="Boxplot of wt") #箱型图
par(opar)
detach(mtcars) #是attach()的逆向操作,即解绑该数据集。

效果如下:
在这里插入图片描述

2. layout()函数

如果想实现这样的需求:有些行只有1张图,有些行有好几个图,则可通过layout()函数来实现。
layout()函数,例layout(matrix(c(1,1,2,3), 2, 2, byrow = TRUE)),是画布有2行2列,其中根据参数4,矩阵是按行填充,即第一行第1-2列都是第1个图,第二行第1列是放第2个图,第二行第3列放的是第3个图。

  • 参数1:是个矩阵,matrix(c(1,1,2,3),矩阵内的数值1表示第一个图,2表示第二个图,3表示第三个图。
  • 参数2和参数3:是指定画布是几行几列
  • 参数4:为真是按行填充
layout(matrix(c(1,1,2,3), 2, 2, byrow = TRUE))
hist(wt)
hist(mpg)
hist(disp)
par(opar)
detach(mtcars)

效果如下:
在这里插入图片描述

6. 图形布局的精细控制

如果想实现这样的需求:自定义第一行的图高度,第二行有两个图,让第二行的第一个图宽度占该行的2/3,另一张的占1/3。则可通过在layout()函数中用widthsweights这两个属性来实现。

layout(matrix(c(1,1,2,3), 2, 2, byrow=TRUE), widths = c(3,1), heights = c(1,1))	#widths=c(3,1)是值第一列占3/4,第二列占1/4;heights = c(1,1)是指第一行与第二行等高
> attach(mtcars)
> hist(wt)
> hist(mpg)

注: 其中属性widths=c(3,1)是值第一列占3/4,第二列占1/4;
heights = c(1,1)是指第一行与第二行等高。
效果如下:
在这里插入图片描述

par()函数的fig参数,精确定位图的位置。

图所在画布中的位置:par(fig=c(x1, x2, y1, y2)),示意图如下:
在这里插入图片描述
示例:

opar <- par(no.readonly = TRUE)
par(fig=c(0, 0.8, 0, 0.8))
plot(mtcars$wt, mtcars$mpg, xlab = "Gallon", ylab = "weight")
par(fig=c(0.65, 1, 0, 0.8), new=TRUE) #要将new属性设为TRUE,否则新画的图会把原来的图给覆盖掉
boxplot(mtcars$mpg, axes=FALSE)
par(fig=c(0, 0.8, 0.55, 1), new=TRUE)
boxplot(mtcars$wt, horizontal = TRUE, axes=FALSE)

效果如下:

在这里插入图片描述

发布了44 篇原创文章 · 获赞 5 · 访问量 4489

猜你喜欢

转载自blog.csdn.net/ljb0077/article/details/99732355