R语言绘图教程1——plot

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文件
  • 0
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值