R语言绘图
1. plot基本绘画参数
#设置所有可用的参数
plot(x = mtcars$wt,
y = mtcars$mpg,
type="o",#线型
main="标题",
sub="子标题",
xlab="x轴",
ylab="y轴",
asp=0.1)#y/x的比例,y轴数值长度与x轴数值长度的比值
1.1 type参数
x <- rnorm(10)#rnorm(10,mean=0.sd=1)生成10个符合标准正态分布(均值为0,标准差为1)的随机数
y <- runif(10)#runif(10,min=0,max=1)#生成0-1范围的10个随机数
plot(x,y)
par(mfrow = c(3, 3), mar = c(2, 2, 2, 2))#mfrow设置布局,mar参数用于设置绘图区域的边距上下左右2个字符宽度
x<- (0:10)*0.1*pi
y <- sin(x)
#同类多图循环共图
for (i in c("p", "l", "b", "c", "o", "h", "s", "S","n")){
plot(x,y, type = i, col= "blue", main = paste("type=\"", i, "\"", sep = ""))#连接表名\"转义符
}
1.2 plot基本参数
plot(1:5, pch=3, main="main", sub="sub",
xlab="xlab",ylab="ylab",
xlim=c(0,6),ylim=c(0,7))
#用于绘制箭头的函数arrow(x0, y0, x1 = x0, y1 = y0, length = 0.25, angle = 30,code = 2, col = par("fg"), lty = par("lty"),lwd = par("lwd"), ...)
?arrows
arrows(6,0, 6,7,angle=90, code=3,col="red")#箭头的两侧与箭头线段成90度角,code=3是三角形
arrows(6,0, 6,7,code=3,col="red")
text(6,3.5,"ylim",pos=2,col="red")
arrows(0,0, 6,0,angle=90, code=3,col="blue")
arrows(0,0, 6,0,code=3,col="blue")
text(3,0,"xlim",pos=3,col="blue")
1.3 符号
par(mfrow = c(1,1))
x <-rep((1:10),13)
y <-rep((13:1),each=10)#将一个长度为10的整数序列 (13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1) 重复10次
a <- 0:129
#a<- as.character(a)
plot(x, y, pch=a,col="red", bg="yellow", axes=F, xlab="", ylab="")
text(x, y, a, pos=1, offset =0.5, cex=0.6, col="blue")
1.5 调色板
library(RColorBrewer)
library(knitr)
display.brewer.all(n=NULL, type="all", select=NULL, exact.n=TRUE, colorblindFriendly=FALSE)#绘制所有色板
kable(brewer.pal.info)#查看所有色板表
行名,是调色板的名称,共有 35 个
maxcolors,调色板中的颜色数
category,调色板分类,有: seq,div, qual 三种
colorblind,对色盲是否友好
单独引用
display.brewer.all(type = "seq")
display.brewer.all(type = "div")
display.brewer.all(type = "qual")
display.brewer.pal(9, 'Blues')#连续 单渐变
display.brewer.pal(11, 'BrBG')#离散 双色渐变
display.brewer.pal(12, 'Paired')#定性 区分色
brewer.pal(12, 'Paired')[c(1, 3, 5)]#挑选任意颜色
[1] "#A6CEE3" "#B2DF8A" "#FB9A99"
library(ggsci)
vignette( "ggsci")#查看介绍
#提取配色的通用函数(palname替换为配色方案名称即可,详见帮助文档)
scale_color_palname&scale_fill_palname
#使用R内置数据集创建箱线图作为本次范例:
data(singer,package="lattice")
p<-ggplot(singer,aes(x=voice.part,y=height,fill=voice.part,color=voice.part,alpha=0.8))+geom_boxplot()
p<-p+theme_bw()+coord_fixed(ratio=0.25)
#使用Nature配色(NPG)
p2<-p+scale_color_npg()+scale_fill_npg()
p2
1. 6 图形设置 par
设置图形参数大小–cex
par(cex=1.5, cex.lab=1.5, cex.axis=1.5, cex.main=1.5, cex.sub=1.5) #lab-xy轴标题,axis刻度,main-主标题,sub副标题
plot(1:10, xlab="AGB", ylab="Species richness", pch=16, main="SP~AGB", sub="GTS plot")
par(op)
设置图形参数颜色–col
par(col="red", col.lab="brown", col.axis="green", col.main="yellow", col.sub="pink")
plot(1:10, xlab="AGB", ylab="Species richness", pch=16, main="SP~AGB", sub="GTS plot")
设置线条类型与宽度–lty&lwd
par(lty=2, lwd=3)
plot(1:10, type="l")
设置字体样式–font
par(font=1, font.axis=2, font.lab=3,font.main=4,font.sub=1)
plot(1:10, xlab="AGB", ylab="Species richness", pch=16, main="SP~AGB", sub="GTS plot")
设置字体家族–family
par(family="mono")
plot(1:10, xlab="AGB", ylab="Species richness", pch=16, main="SP~AGB", sub="GTS plot")
设置背景色–bg
par(bg="lightblue")
plot(1:10)
设置图形边框样式–bty
par(bty="l")
plot(1:10)
设置标签方向–las
par(las=1)
plot(1:10, xlab="AGB", ylab="Species richness", pch=16, main="SP~AGB", sub="GTS plot")
设置文字方向–srt
par(srt=45)
plot(1,type="n")
text(1,1, "R Graphics", cex=2)
设置坐标轴扩展–xaxs&yaxs
plot(1:10, cex=2, pch=15, xlim=c(0, 10), ylim=c(0,10))
par(xaxs="i", yaxs="i")
plot(1:10, cex=2, pch=15, xlim=c(0, 10), ylim=c(0,10))
设置图形纵横比–asp
plot(1:10)
abline(a=0,b=1, col="red")
abline(a=6,b=-1, col="blue")
plot(1:10, asp=1)
abline(a=0,b=1, col="red")
abline(a=6,b=-1, col="blue")
1.7 布局设置mar
par(mfrow=c(2,2), mar=c(2,2,2,2))
plot(1);plot(1);plot(1);plot(1)
页边距
#oma表示外边缘outer margin的大小,mar表示内边缘,通过rep(3, 4)将边缘四个边都设置为大小为3的单位
par(oma=rep(3, 4),
mar=rep(6, 4),
bg="grey80")
#指定空白绘图区域的x和y坐标范围,从(0,0)到(1,1);不显示绘图区域的标注(annotations)和坐标轴axes
plot(c(0, 2), c(0, 1), type="n", ann=FALSE, axes=TRUE)#由于设置了外边缘所以等同于设置的起点位置
box("outer", col="red", lwd=3)
#xpd=TRUE允许绘图区域中的元素超出绘图区域边界
par(xpd=TRUE)
#整个绘图区域内绘制一个蓝色的矩形
rect(-1, -1, 2, 2, col="azure")
#绘图区域内部绘制一个蓝色边框
box("figure", col="blue", lwd=3)#box(figure)box("figure"):在整个绘图区域内绘制一个边框,包括绘图区域和绘图区域的外边缘
#恢复到默认设置,不允许绘图区域中的元素超出绘图区域边界
par(xpd=FALSE)
rect(-1, -1, 2, 2, col="wheat")
box("plot", lty="dashed", lwd=3)#box(plot)当前的绘图区域内绘制一个边框
axis(1)#x轴坐标
axis(2)
text(.5, .5, "Plot Region",font=2, cex=1.5)
title(main="Figure Region",line=4)#位于图形的第4行
box()#添加边框
for (i in 1:4) mtext(paste("Margin", i), side=i,line=2.5)
for (i in 1:4) mtext(paste("Outer margin", i), side=i, line=1, outer=TRUE)
2 基本绘图元素
2.1绘制点
plot(5, xlim=c(0,10), ylim=c(0,10), type="n") #绘制底图
points(6,5) #添加点
points(5,5, pch=15) #更改点的图标
points(4,5, pch=15, col="green") #更改点的颜色
points(3,5, pch=15, col="green", cex=3) #更改点的大小
data=data.frame(x=1:10, y=runif(10,1,10)) #产生数据框数据
points(data$x,data$y, pch=17, col="red", cex=3) #添加多个点
points(data$x,data$y, pch=24, col="red", bg="yellow", cex=1.5)
2.3 直线
data=data.frame(x=1:10, y=runif(10)) #产生1个数据框数据
plot(data, ylim=c(-1,1)) #绘制底图
model=lm(y~x, data=data) #线性回归
abline(model) #将回归线添加到图中
abline(v=6, h=0, lwd=2, col="red") #在x为6和y为0处各添加一条颜色为红色,粗度为2的直线
abline(a=-1, b=0.1, lwd=2, lty=2) #添加一条截距为-1,斜率为0.1的虚线
2.4 线段、箭头、折线及平滑曲线
plot(5, xlim=c(0,10), ylim=c(0, 10), type="n") #绘制底图
segments(2,2, 8,8, lwd=2, col="green") #添加起始坐标为(2, 2) 终点坐标为(8, 8), 颜色为绿色,粗度为2 的线段
segments(2,1, 8,7, lwd=2, lty=2) # 更改线的类型
arrows(5,0,5,5, code=2, col="red")
plot(cars, main = "Stopping Distance versus Speed")
lines(cars, col="blue")
lines(stats::lowess(cars),col="red")
xspline(cars,shape =1, col="red")#平滑
2.5 曲线
curve(x^3 - 3*x, -2, 2)
curve(x^2 - 2, add = TRUE, col = “violet”)
2.6 矩形
plot(5, xlim=c(0,10), ylim=c(0, 10), type="n") #绘制底图
rect(1,1, 3,3) #添加一个矩形
rect(3,3, 6,6, density=8) # 填充线密度设置为8根
rect(6,6, 9,9, density=8, angle=15) #填充线倾斜度设置为15度
rect(1,7, 4,9, col="grey") #灰色填充
rect(1,7, 4,9, col="grey", border="red") #矩形边框设置为红色
rect(1,7, 4,9, col="grey", border="red", lwd=3) #将矩形边框加粗
box(lwd=3) #给整个图加一个粗度为3的外边框
2.7栅格绘制
plot(300,type="n", xlab="", ylab="", xlim=c(1, 600), ylim=c(1, 400), xaxs="i", yaxs="i")#底图
#xaxs="i"指定x轴的扩展方式为"internal",这意味着x轴的范围将与数据匹配,不会进行任何额外的扩展
grid(nx=30, ny=20, col="red")#x轴分为30份,y轴分为20份
grid(nx=6, ny=4, col="black", lty=1, lwd=2)#lty:指定网格线的类型(线型)
box(lwd=2)
2.8 文本
plot(1:10) #绘制底图
title(main="AGB~SP", line=1) #添加主标题
text(6,4, labels="R Graphics", srt=45, cex=2, font=2) #添加文本,并旋转45度,放大2倍,粗体
mtext(text="R side text", side=4) #在绘图框外添加文本
2.9 公式
##公式#####
demo(plotmath)
y <- function(x) (exp(-(x^2)/2))/sqrt(2*pi)
plot(y, -5, 5, main = expression(f(x) == frac(1,sqrt(2*pi))*e^(-frac(x^2,2))), lwd = 3, col = "blue")#frac用于创建分数
df <- data.frame(x=cars$speed,y=cars$dist)
m <- lm(y ~ x, df)
#substitute()函数用于替换表达式中的一些部分。创建一个包含回归模型参数估计、方程和R²值的文本表达式
#italic(y)斜体y,
eq <- substitute(italic(y) == a + b %.% italic(x)*","~~italic(r)^2~"="~r2,
list(a = signif(coef(m)[1], digits = 2),
b = signif(coef(m)[2], digits = 2),
r2 = signif(summary(m)$r.squared, digits = 3)))
#digits()函数用于限制数字的小数位数
plot(df, pch=3, col="red")
abline(m, col="blue")
text(5,110, eq, adj=0)
#adj = 0:表示文本标签的左边缘与指定的坐标点的x坐标对齐,0.5是中心,1是有边缘
2.10 坐标轴
par(mfrow=c(1,2)) #设置par,绘制一页多张图
plot(1:12, rnorm(12),
xlab="", ylab="", axes=F,
pch=18, cex=1.5, col="green")
axis(side=1, at=1:12,
labels=LETTERS[1:12],
col.axis = "blue") #添加坐标轴
box() #添加外边框
# 1:12:x轴上的点的位置,rnorm(12)正态随机,axes=F不显示坐标轴,pch=18是实心
plot(1:12, rnorm(12), xlab="", ylab="",
axes=F, pch=18, cex=1.5, col="green")
# side=1是x轴,at是设置x轴间隔2-12并命名为A-F
axis(side=1, at=seq(2, 12, by=2),
labels=LETTERS[1:6], col.axis = "red") #添加坐标轴 注意放大绘图窗口查看变化
#side=2是y轴,刻度长0.05
axis(2, tck=0.05) #添加向内的刻度
box()
2.11图例
plot(runif(20), pch=16, col="red" ,
ylim=c(0,1.2), type="b",lty=1)
points(runif(40), pch=15,
col="green", type="b", lty=2)
legend("topright",
legend=c("red point", "green square"),
pch=16:15, col=c("red", "green"), lty=1:2)#lty线型
plot(1:8, type="n", xlab="", ylab="", xlim=c(0, 10))
rect(c(2,6), c(0,0), c(4, 8), c(5, 7), col=2:3)
legend(x=0, y=8, legend=c("red", "green"), fill=2:3, bty="n")
box(lwd=2)
2.12 保存
(1)使用png()、jpeg()、tiff()等函数可以将R图形保存为相应格式的图像文件
jpeg("../myplot.png", width=800, height=600,res=600) # 打开jpeg/png文件
# 绘制图形的代码
dev.off() # 关闭PNG文件
(2)使用ggsave()函数保存ggplot2图像
library(ggplot2)
p <- ggplot(data=mtcars, aes(x=mpg, y=hp)) + geom_point()
ggsave("myplot.png", plot=p, width=6, height=4)
(3)使用pdf()、postscript()等函数保存矢量图像
pdf("myplot.pdf", width=6, height=4) # 打开PDF文件
# 绘制图形的代码
dev.off() # 关闭PDF文件