本文非原创
plot(1:20,col="red") #在一般绘图函数(如plot、boxplot)中,col参数表示颜色
这是一个很好很强大的R颜色列表
可以直接把那个标号:”#XXXX”用到程序里
plot(1:20,col="#CDB79E") # ""不能省
一个极好的R包,RColorBrewer,这个包的功能主要就是提供一些自己已经配好色的R颜色,另外提供一系列颜色的分配,比如你想要从正黄色到正蓝色直接过度10个颜色:
color<-colorRampPalette(brewer.pal(3,"Blues"))(100)
#brewer.pal(3,"Blues")表示蓝色系的3个颜色,3为最小值,使用brewer.pal()需先安装RColorBrewer包,(100)表示将这三个颜色过度成100个
plot(1:100,col=color,pch=20,cex=2) #pch表示形状,cex表示大小
这样就从白色到正蓝色划分成100个过渡色
png("~/plotSamples.png",width=9,height=9,unit="in",res=108) #在工作目录下创建plotSamples.png图
par(mfcol=c(2,2))
color<-colorRampPalette(c("red","yellow","blue"))(30)
plot(1:30,col=color,pch=20,cex=2,main="1:30")
plot(1:10,col=color,pch=20,cex=2,main="1:10")
plot(1:90,col=color,pch=20,cex=2,main="1:90")
plot(1:900,col=color,pch=20,cex=2,main="1:900")
dev.off()
RColorBrewer::brewer.pal函数的功能是直接调用这个包已经配好的颜色,其中有一系列名字
library("RColorBrewer")
display.brewer.all() # Show all the colour schemes available
各种配好的色号
png("~/plotSamples.png",width=9,height=9,unit="in",res=108)
par(mfcol=c(1,2))
barplot(1:5,col=RColorBrewer::brewer.pal(n = 5,name = "Set2"),main="1:5")
barplot(1:10,col=RColorBrewer::brewer.pal(n = 8,name = "Accent"),main="1:10") #注意n不可超过该系列颜色的最大值
dev.off()
par()函数的参数可见:R 绘图参数设置函数par()详解
文字
在图中加一些文字,可以用 text() 函数,在刚才柱状图上加”Hello World!”
barplot(1:5,col=RColorBrewer::brewer.pal(n = 5,name = "Set2"))
text(x=4,y=4,labels = "Hello World!",cex=2) #参数意义见下
# text()函数中,x代表了横坐标,则4表示写在以第四个bar为中心的位置
# y代表了高度为4
# labels即想写的话,可以把任何的字符串嵌进来
# 最后一个参数是cex,这个是控制字体大小,1是默认值,如果你希望字体放大一倍,就设置为2.
点、线
点和线是很基础的元素,点的函数是points,线的函数是lines,注意,每一次plot都会展开一副新的图。如果已经用过plot画了一部分图了,还想要继续往图上添加东西,就需要用 points() 或者 lines() 函数,不能重新用plot()
barplot(1:5,col=RColorBrewer::brewer.pal(n = 5,name = "Set2"))
points(rep(3,5),pch=20,cex=3,col="orange") # rep(3,5)表示["3","3","3","3","3"]
在plot或者point的时候,理论上你应该输入x,y两个参数,两者应该是完全对应的,一一对应,前者是横坐标,后者是纵坐标。但是如果你只输入了一批数据,程序就会默认横坐标为1,2,3,4……,纵坐标是你输入的数值。这就是为什么,在这个函数里,我只输入了rep(3,5)而没有输入横坐标。
barplot(1:5,col=RColorBrewer::brewer.pal(n = 5,name = "Set2"))
points(rep(3,5),pch=20,cex=3,col="orange")
lines(sample(1:5),col="gray",lwd=2,lty=2) sample()表示对向量进行不放回随机抽样
划线使用lines()函数,用法和之前是一样的,如果输入了对应的x,y坐标,就可以直接绘制,如果只输入一个vector,程序就默认横坐标是1,2,3……,此图中,sample(1:5)的值为("3","4","5","1","2"),后面的参数里,lwd控制线的粗细,lty控制线的类型,lty=2意思是虚线。
标题
只需在plot或者其他绘图程序里,添加main参数即可
plot(1:10,main="This is a Title",cex.main=1.5) #cex.main=1.5表示标题的尺寸是标准值的1.5倍
标题也可以用text()函数绘制
图例
通过legend函数我们可以添加图例。
x <- seq(-pi, pi, len = 65)
plot(x, sin(x), type = "l", ylim = c(-1.2, 1.8), col = 3, lty = 2)
points(x, cos(x), pch = 3, col = 4)
lines(x, tan(x), type = "b", lty = 1, pch = 4, col = 6)
title("legend(..., lty = c(2, -1, 1),
pch = c(NA, 3, 4), merge = TRUE)",
cex.main = 1.1)
legend(-1, 1.9,
c("sin", "cos", "tan"),
col = c(3, 4, 6),
text.col = "green4",
lty = c(2, -1, 1),
pch = c(NA, 3, 4),
merge = TRUE,
bg = "gray90")
坐标轴
plot(1:10,xlab="X lab",ylab="y lab") #X la、y lab分别是x轴和y轴的参数
如果想要更换坐标轴上的1,2,3,4,5
plot(1:10, xaxt = "n", xlab='Some Letters')
axis(1, at=1:10, labels=letters[1:10])
如果想要将坐标轴旋转一些角度
par(las=2) #设置坐标标记显示方向。= 0(缺省):平行于坐标轴;= 1:平行于x轴;= 2:垂直于坐标 轴;= 3:平行于y轴
plot(1:10, xaxt = "n", xlab='Some Letters') # xaxt="n" 表示禁用x轴的刻度线
axis(1, at=1:10, labels=letters[1:10])
构图函数
在一张图中绘制多张图
par(mfrow=c(2,3))
plot(1:10)
plot(1:10)
plot(1:10)
plot(1:10)
plot(1:10)
plot(1:10)
使用par(mfrow=c(2,3))参数中,前一个代表行,后一个代表列,mfrow表示按行排列,把图片分成两行三列。
另一个很好用的分屏画图的函数layout()
参数matrix()是矩阵,非0数字代表绘制图形的顺序,相同数字代表占位符;
”0”代表空缺,不绘制图形
1、绘制的是3行2列的图像,矩阵按列排序
attach(mtcars)
layout(matrix(c(1,1,2,0,3,4), 3, 2))
# 第一个图形,占据第1列的前2行,对应“1 ,1”;第二个图形对应第1列的最后1行,对应“2”;依次类推
hist(wt)
hist(mpg)
hist(disp)
hist(carb)
detach(mtcars)
2、绘制的是3行2列,按行排序
attach(mtcars)
layout(matrix(c(1,1,2,0,3,4), 3, 2,byrow = TRUE))
# 第一个图形,占据第1行,对应“1 ,1”;第二个图形对应第2行的第1行,对应“2”;依次类推
hist(wt)
hist(mpg)
hist(disp)
hist(carb)
detach(mtcars)
本文为学习笔记,学习文章:
R语言中layout()函数的用法
R极简教程-10:R语言绘图基础
网友评论