学习之旅12-R初识图形

13 篇文章 0 订阅
7 篇文章 0 订阅

前言

  • 都说文不如表,表不如图,一幅精心绘制的图形能够帮助你在数以千计的零散信息中做出有意义的比较,提炼出使用其他方法时不那么容易发现的模式,检查出数据异常值。这正是我们做数据分析分目的,那么我们是怎么通过R语言来进行图表的绘制呢,下面我们就通过代码举例进行讲解。

3.1 关于图形

  • 展开图形讲解之前,我门先回顾一下上节的数据结构-数据框。
> key <- c(5,10,15,20,25);
> Pa <- c(12,17,20,23,30);
> Pb <- c(10,15,21,22,27);
> data01 <- data.frame(key,Pa,Pb)
> data01
  key Pa Pb
1   5 12 10
2  10 17 15
3  15 20 21
4  20 23 22
5  25 30 27
> data02 <- key #取列为key的所有数据
> data02
[1]  5 10 15 20 25
> data03 <- data01[which(key==5)] # 取key=5这一列的数据,注意与data04 区别
> data03
  key
1   5
2  10
3  15
4  20
5  25
> data04 <- data01[which(key==5),] #取key=5这一行和所有列数据。注意有逗号。
> data04
  key Pa Pb
1   5 12 10
> T1 <- plot(key,Pa) # 剂量与植物A图形
> names(data01) <- c("key1","Pa1","Pb1") #此时将数据框重命名后,我们此时会发现在作图数调用key1,Pa1会出现报错,同理以上能执行的代码换成key1均会报错
> T1 <- plot(key1,Pa1)
Error in plot(key1, Pa1) : 找不到对象'key1' 
> data05 <- key1
错误: 找不到对象'key1'
> data04 <- data01[which(key1==5),]
Error in which(key1 == 5) : 找不到对象'key1'

在这里插入图片描述

由上可知,当我们对数据框重命名后即不再是默认的对象名,此时不能直接调用,必须使用数据$变量进行调用。此时我们可以通过attach()可将数据框添加到R的搜索路径中。R在遇到一个变量名以后,将检查搜索路径中的数据框,以定位到这个变量,方便减少代码量。detach()将数据框从搜索路径中移除。detach()并不会对数据框本身做任何处理。两者务必配合使用,若使用attach()后没有移除,再次使用attach()则会报错:The following objects are masked from…

> attach(data01)
> data05 <- key1
> key1
[1]  5 10 15 20 25
> T1 <- plot(key1,Pa1)
> pdf("剂量与生长影响图.pdf") #一下代码会将图形保存到当前工作目录名为剂量与生长影响图的pdf中
> attach(data01) #将数据框添加到R的搜索路径中
> plot(key1,Pa1)
> abline(lm(key1~Pa1)) #添加了一条最优拟合曲线
> title("T1") #中文图名不显示
> detach(data01) #将数据框从搜索路径中移除
> dev.off() #输出返回到终端,不执行将不会生成pdf

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2 图形参数

  • 上面我们只是简单的绘制了基本的图形,但是对于一张图片来说,不仅仅只是简单展示,我们还需要从图表中获取更多的信息,因此需要不同的参数来完善图表信息,比如图表标题,横纵坐标含义,解释说明,颜色,背景等等,这一系列都需要参数来进行指定。
  • par()函数,通过不同的参数来修改图表信息。以这种方式设定的参数值除非被再次修改,否则将在会话结束前一直有效。其调用格式par(optionname=value1,optionname=value2,…)。不加参数地执行par()将生成一个含有当前图形参数设置的列表。添加参数no.readonly=TRUE可以生成一个可以修改的当前图形参数列表。
> par() # 不带任何参数的par()函数会列出当前图表的参数列表。未全部列出
$xlog
[1] FALSE
$ylog
[1] FALSE
$adj
[1] 0.5
$ann
[1] TRUE
$ask
[1] FALSE
$bg
[1] "white"

注意一旦用par()函数定义了参数,那么这个参数会一直到会话结束,也就是所有后续的图表都会沿用这个参数。

> key <- c(5,10,15,20,25);
> Pa <- c(12,17,20,23,30);
> Pb <- c(10,15,21,22,27);
> data01 <- data.frame(key,Pa,Pb)
> opar <- par(no.readonly = TRUE) #保存当前图形的参数设置(以便后续恢复设置)
> par(lwd=2, cex=1.5) #线条宽度为默认2倍,符号大小为默认的1.5倍
> key <- c(5,10,15,20,25);
> Pa <- c(12,17,20,23,30);
> Pb <- c(10,15,21,22,27);
> data01 <- data.frame(key,Pa,Pb)
> par(lwd=2, cex=1.5)
> plot(key,Pa, type="b", pch=19, lty=2, col="red")
> plot(key,Pb, type="b", pch=23, lty=6, col="blue", bg="green")
> plot(1:50, type="b", col="green")

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

由上可知,通过par()设定的参数对后面所有的图形都有效,而在plot()函数中指定的参数仅对当前图形有效。此时我们还没有还原初始的图形参数设置,因此par()设定的参数一直到会话结束会对所有后续图形都生效。我们通过par(opar )来恢复默认参数。

> par(opar)
> plot(key,Pa, type="b", pch=19, lty=2, col="red")
> plot(key,Pb, type="b", pch=23, lty=6, col="blue", bg="green")

在这里插入图片描述
在这里插入图片描述

  • 另外一种就是为高级是为高级绘图函数直接提供optionname=value的键值对。这种情况下,指定的选项仅对这幅图形本身有效:
> plot(key,Pb, type="b", pch=23, lty=6, col="blue", bg="green")

3.2.1 符号与线条

  • 符号参数

pch 指定绘制点时使用的符号
cex 指定符号的大小。cex是一个数值,表示绘图符号相对于默认大小的缩放倍数。默认大小为1,1.5表示放大为默认值的1.5倍,0.5表示缩小为默认值的50%,等等。对应21~25,我们还可以指定边界颜色(col=)和填充色(bg=)。
在这里插入图片描述

  • 线条参数

lty 指定线条类型
lwd 指定线条宽度。lwd是以默认值的相对大小来表示的(默认值为1)。例如,lwd=2将生成一条两倍于默认宽度的线条。
在这里插入图片描述

> plot(key,Pa, type="b", pch=19,cex=1.5, lty=5, lwd=2) #type="b" 同时绘制点和线,符号类型为实点圆形,大小为默认的1.5倍,线条类型为长虚线,线条宽度为默认的2倍

在这里插入图片描述

3.2.2 颜色参数

col 默认的绘图颜色。某些函数(如lines和pie)可以接受一个含有颜色值的向量并自动循环使用。例如,如果设定col=c(“red”, “blue”)并需要绘制三条线,则第一条线将为红色,第二条线为蓝色,第三条线又将为红色
col.axis 坐标轴刻度文字的颜色
col.lab 坐标轴标签(名称)的颜色
col.main 标题颜色
col.sub 副标题颜色
fg 图形的前景色
bg 图形的背景色

  • 可以通过颜色下标、颜色名称、十六进制的颜色值、RGB值或HSV值来指定颜色。
    举例来说,col=1、col=“white”、col="#FFFFFF"、col=rgb(1,1,1)和col=hsv(0,0,1)都是表示白色的等价方式。

3.2.3 文本参数

  • 图形的参数还可以用于指定字号,字体以及字样,以下是具体的字号大小参数:

cex 表示相对于默认大小缩放倍数的数值。默认大小为1,1.5表示放大为默认值的1.5倍,0.5表示缩小为默认值的50%,等等
cex.axis 坐标轴刻度文字的缩放倍数。类似于cex
cex.lab 坐标轴标签(名称)的缩放倍数。类似于cex
cex.main 标题的缩放倍数。类似于cex
cex.sub 副标题的缩放倍数。类似于cex

  • 字体,字号样式参数:

font 整数。用于指定绘图使用的字体样式。1=常规,2=粗体,3=斜体,4=粗斜体,5=符号字体(以Adobe符号编码表示)
font.axis 坐标轴刻度文字的字体样式
font.lab 坐标轴标签(名称)的字体样式
font.main 标题的字体样式
font.sub 副标题的字体样式
ps 字体磅值(1磅约为1/72英寸)。文本的最终大小为 ps*cex
family 绘制文本时使用的字体族。标准的取值为serif(衬线)、sans(无衬线)和mono(等宽)

> plot(key,Pa, type = "b", 
main = "主标题", sub = "副标题", #定义坐标的标题
xlab = "X坐标", ylab = "Y坐标", #对坐标轴命名(坐标轴标签)
cex.axis = 1.5, #坐标轴刻度文字大小,默认的1.5倍
cex.lab = 1.5, #坐标轴标签文字大小,默认的1.5倍
cex.main = 1.5, cex.sub = 1.5, # 坐标的标题文字的大小
font.axis = 2, font.lab = 4, # 坐标刻度文字字体为粗体,坐标轴标签为粗斜体
font.main = 1, font.sub = 2 # 坐标的主标题的字体为常规,副标题字体为粗体
)

在这里插入图片描述

当然,以上设置只针对当前图形有效,若我们想要后面所有的图形的参数都是这样,我们就可以用par()函数来统一指定,然后恢复默认即可。

< opar <- par(no.readonly = TRUE) #保存当前图形的参数设置
< par(
cex.axis = 1.5, #坐标轴刻度文字大小,默认的1.5倍
cex.lab = 1.5, #坐标轴标签文字大小,默认的1.5倍
cex.main = 1.5, cex.sub = 1.5, # 坐标的标题文字的大小
font.axis = 2, font.lab = 4, # 坐标刻度文字字体为粗体,坐标轴标签为粗斜体
font.main = 1, font.sub = 2 # 坐标的主标题的字体为常规,副标题字体为粗体
)
> plot(1:100)
> par(opar) # 恢复默认

在这里插入图片描述
在这里插入图片描述

3.2.4 标题,标签参数

main : 主标题,sub : 副标题
xlab : x轴标签,ylab : y轴标签
xlim=c(0,20),ylim=c(0,100) :坐标轴的范围
title()函数单独来为图形添加标题和坐标轴标签
axis()函数来创建自定义坐标轴,具体参数选项入下:
side: 一个整数,表示在图形的哪边绘制坐标轴(1=下,2=左,3=上,4=右)
at: 一个数值型向量,表示需要绘制刻度线的位置
labels: 一个字符型向量,表示置于刻度线旁边的文字标签(如果为NULL,则将直接使用at中的值)
pos: 坐标轴线绘制位置的坐标(即与另一条坐标轴相交位置的值)
lty: 线条类型
col: 线条和刻度线颜色
las: 标签是否平行于(=0)或垂直于(=2)坐标轴
tck: 刻度线的长度,以相对于绘图区域大小的分数表示(负值表示在图形外侧,正值表示在图形内侧,0
表示禁用刻度,1表示绘制网格线);默认值为-0.01
(…) 其他图形参数

> plot(1:50) # 此时图表会有默认的坐标轴标签,若再次使用title()函数来指定标签名称,则会出现重复。
> title(main = "主标题", sub = "副标题", col.main = "red", col.sub = "blue", xlab = "x轴", ylab = "y轴")

在这里插入图片描述
在这里插入图片描述

  • 故我们在画图的时候直接先定义标签名称,不再单独再用title()函数来指定。

3.2.5 图形尺寸,边界参数

pin: 以英寸表示的图形尺寸(宽和高)
mai: 以数值向量表示的边界大小,顺序为“下、左、上、右”,单位为英寸
mar: 以数值向量表示的边界大小,顺序为“下、左、上、右”,单位为英分*。默认值为c(5, 4, 4, 2) + 0.1

3.2.6 参考线

  • 函数abline(h = c(10,20), v=c(5,10),…) 绘制一条参数线,h代表添加水平参考线,v代表添加垂直参考线
> plot(key, Pa, type = "b", pch = 16, lty = 3, lwd = 2)
> abline(h=30, v=20, lty = 3,col = "blue") # 在x=30,y=20的位置添加一条lty=2 的颜色为blue 的参考线

在这里插入图片描述

参考线的目的一般来说是为了设置一个阈值范围,尤其在数据分析中对应某些临界值需要用于参考,此时参考线的作用就很明显啦。

3.3 图例

  • 当图形中的数据不止一组时,此时我们无法明确的指定不同的折线代码哪一组数据,此时我们通过图例来对图表做进一步的修饰,以便我们更好的从图表中获取更多信息。legend(location, title, legedn, …)函数来添加图例,具体参数如下:

location:以指定图例的位置(bottom、bottomleft、left、topleft、top、topright、right、bottomright或center)
inset :指定图例向图形内侧移动的大小。
title:图例标题
legend: 图例标签组成的字符型向量
…:其他,一般都是以向量组c(a, b)组成,颜色,符号大小,线条宽度等等

> key <- c(5,10,15,20,25);
> Pa <- c(12,17,20,23,30);
> Pb <- c(10,15,21,22,27);
> data01 <- data.frame(key,Pa,Pb)
> opar <- par(no.readonly = TRUE) # 保存默认参数值
> par(cex = 1.5, lwd= 1.5, cex.main = 1, cex.lab = 0.5, cex.axis = 0.5, font.main = 2, font.lab = 1, pin = c(5,2)) #对于一些通用的参数可以设置全局变量
> plot(key, Pa, type = "b", pch = 16, lty = 1, col = "green", main= "药物剂量对不同植物的影响", xlab = "剂量", ylab = "生长影响", ylim = c(10,30)) #绘制第一个图形
> abline(h = c(30), lwd = 1.5, lty = 6, col = "red") #设置参考线
> lines(key, Pb, type = "b", pch = 17, lty = 2, col = "blue") #在原图基层上添加第二组数据图形
> legend("topleft", inset = 0.05, title = "图例", c("Pa","Pb"), lty = c(1,2), pch = c(16,17),col = c("green","blue"), cex = 0.5) # 在左上角添加图例,cex = 0.5 来控制图例大小

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值