《R语言游戏数据分析与挖掘》一3.2 低级绘图函数

简介: 本节书摘来华章计算机《R语言游戏数据分析与挖掘》一书中的第3章 ,第3.2节,谢佳标 著 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.2 低级绘图函数

R还可以通过函数在现有图形的基础上增加一些额外的内容,如添加标题、绘制坐标轴、在特定的位置增加图形(如辅助线,拟合线)或文字等。这些函数在R中称为低级作图命令(low-level plotting command)。

3.2.1 标题

除了图形参数,许多高级函数(如plot、barplot、boxplot、qqnorm)也允许自行设定坐标轴和文本选项。以下代码在图形上添加了主标题(main)、副标题(sub)、坐标轴标签(xlab、ylab),结果如图3-9所示。

> attach(iris)
> boxplot(Sepal.Length~Species,col=heat.colors(3),
+         main=list("Sepal.Length按照Species分类的箱线图",
+                   font=4,col="red",cex=1.5),
+         sub=list("数据来源:iris数据集",font=3,
+                  col="green",cex=0.8),
+         xlab="Species",ylab="Sepal.Length")

image

数据来源:ins数据集
可以使用title()函数为图形添加标题和坐标轴标签。调用格式为:

title(main = NULL, sub = NULL, xlab = NULL, ylab = NULL,
      line = NA, outer = FALSE, ...)

title常用参数说明如表3-4所示。
image

执行以下代码可以得到与图3-9相同效果的箱线图。

> boxplot(Sepal.Length~Species,col=heat.colors(3))
> title(main=list("Sepal.Length按照Species分类的箱线图",
+                      font=4,col="red",cex=1.5),
+       sub=list("数据来源:iris数据集",font=3,
+                col="green",cex=0.8),
+       xlab="Species",ylab="Sepal.Length")

由上可见,对标题的多个参数赋值时,其赋值形式是以list形式承载的。也可以先使用main="主标题",设置主标题内容,再通过font.mian、col.main、cex.main设置主标题文字的样式、颜色和大小。执行以下代码可得到与图3-9相同效果的箱线图。

> boxplot(Sepal.Length~Species,col=heat.colors(3))
> title(main="Sepal.Length按照Species分类的箱线图",
+       font.main=4,col.main="red",cex.main=1.5,
+       sub="数据来源:iris数据集",font.sub=3,
+       col.sub="green",cex.sub=0.8,
+       xlab="Species",ylab="Sepal.Length")

3.2.2 坐标轴

在高级绘图函数中一般都有用于设置坐标轴展示和范围的axes、xlim和ylim参数。其中axes是逻辑参数,axes=TRUE(默认)时,显示x轴和y轴,axes=FALSE时,隐藏x轴和y轴;参数xaxt="n"和yaxt="n"分别隐藏x轴或y轴;xlim、ylim参数设置x轴、y轴范围。
低级绘图函数axis( )可以在上、下、左、右4个边上设置坐标轴,并设置坐标轴的范围/刻度标记等。其调用形式为:

axis(side, at = NULL, labels = TRUE, tick = TRUE, line = NA,
    pos = NA, outer = FALSE, font = NA, lty = "solid",
lwd = 1, lwd.ticks = lwd, col = NULL, col.ticks = NULL,
hadj = NA, padj = NA, ...)

主要参数如表3-5所示。
image

利用高级绘图函数boxplot对iris数据集绘制箱线图,将参数axes设置为FALSE隐藏x轴和y轴,然后利用低级绘图函数axis详细设置x轴和y轴。执行以下代码得到的结果如图3-10所示。

> #加载iris数据到内存
> attach(iris)
> #绘制箱线图
> boxplot(Sepal.Length~Species,col=heat.colors(3),
+           axes=FALSE,xlab="Species",ylab="Sepal.Length")
> #设置X轴样式
> axis(side=1,at=1:3,labels=unique(Species),col.axis="red",tick=FALSE)
> #设置Y轴样式
> axis(side=2,col.ticks = "gold",font = 3,col = "blue")

image

side=1表示设置x轴,col.axis="red"b表示将x轴刻度标记颜色设置为红色,tick=FALSE表示不显示坐标轴;side=2表示设置y轴,font = 3表示y轴字体是斜体,col = "blue"表示y轴线条是蓝色,col.ticks = "gold"表示将刻度颜色设置为金色。

3.2.3 图例

当图形中包含的数据不止一组时,通常会使用不同的颜色来区分,并且使用图例说明不同颜色代表的组别。图例中既包含文字,也包含点和线元素。可以利用legend函数来设置图例参数。
legend函数的常用参数如表3-6所示。
image

下面看看对1940年弗吉尼亚州的死亡率作图的一个例子。执行以下代码得到的结果如图3-11所示。

> #绘制分组柱状图
> barplot(VADeaths,beside = TRUE,col=cm.colors(5))
> # 添加图例
> legend("top",legend=rownames(VADeaths),
+         ncol=5,fill=cm.colors(5),bty="n")

将图例摆放在top位置,图例内容为VADeaths数据集的行名称,图例列数设置为5,每个图例标签的颜色设置为与柱子对应的类别颜色相同,最后不要图例边框。

3.2.4 网格线

使用grid()函数可以在绘图的基础上添加网格线,其参数主要包括:ny用于设置水平网格的数目;nx用于设置垂直网格的数据,设置为NA时,表示不绘制相应的网格线;lwd、lty和col参数分别设置网格线的宽度、样式和颜色。

image

继续以VADeaths为例,执行以下代码得到的结果如图3-12所示。

> op <- par(mfcol=1:2)
> barplot(VADeaths,beside = TRUE,col=cm.colors(5),
+         main="plot VADeaths with grid()")
> grid()
> barplot(VADeaths,beside = TRUE,col=cm.colors(5),
+         main="plot VADeaths with grid(NA,7,lty=2,lwd=1.5,col='green')")
> grid(NA,7,lty=2,lwd=1.5,col="green")
> par(op)

image

左图使用grid()默认参数,同时绘制水平和垂直的网格线,颜色默认是深灰色,线型是点线;右图不绘制垂直网格线(nx=NA),绘制6条水平网格线(ny=7),线型为虚线,粗细为默认的1.5倍,颜色为绿色。
3.2.5 点
通过低级绘图函数points可以在图上绘制点:
points(x, y = NULL, type = "p", ...)
使用这个函数可以很方便地在已有的图上加点。参数x是横坐标位置,参数y是纵坐标位置,可以设置向量来代表多个点的位置。参数type有9种取值,分别代表不同的样式:"p"表示画点(默认);"l"表示画线;"b"表示同时画点和线,但点线不相交;"c"表示将type="b"中的点去掉,只剩下相应的线条部分;"o"表示同时画点和线,且相互重叠(这是与type="b"的区别);"h"表示画铅垂线;"s"表示画阶梯线,从一点到下一点时,先画水平线,再画垂直线,"S"也是画阶梯线,但从一点到下一点是先画垂直线,再画水平线;"n"表示做一幅空图。大部分plot函数的参数都适用于points。最常用的参数是col(设置点的颜色)、bg(设置点的背景色)、pch(设置所绘制的符号)、cex(设置点的大小)和lwd(设置符号边框线条的宽度)。
创建一个数据对象data,其中100个数据服从mean为0,sd为1的正态分布,另外3个点服从mean为4,sd为1的正态分布。接下来对data绘制箱线图,并利用points函数将异常值用黄色点标记出来。执行如下代码得到的结果如图3-13所示。
image

> set.seed(1234)
> data <- c(rnorm(100,mean=0,sd=1),rnorm(3,mean=4,sd=1))    #创建数据对象data
> boxplot(data,col="violet",ylim=c(-4,5),outline=F)         #绘制箱线图
> points(rep(1,3),data[101:103],pch=21,bg="yellow",cex=1.2) #标识异常值

3.2.6 文字

可以用text函数为图形添加文字。其调用形式为:

text(x, y = NULL, labels = seq_along(x), adj = NULL,
      pos = NULL, offset = 0.5, vfont = NULL,
      cex = 1, col = NULL, font = NULL, ...)

其参数描述如表3-7所示。
image

如果想将图3-13中的异常值用“异常值”文字标明。只需要增加如下代码即可,结果如图3-14所示。
image

> text(rep(1,3),data[101:103],pos=4,label=paste0("异常值",data[101:103]))#pos=4表示在右侧

3.2.7 线

  1. lines函数绘制曲线
    lines函数可以在已有图形中添加曲线,使用格式为lines(x, y = NULL, type = "l", ...)。plot函数的很多参数也可用于lines。一些比较有用的参数包括lty(线条类型)、lwd(线条宽度)、col(线条颜色)等。

由于绘制散点图的高级绘图函数plot并没有add参数,即在同一绘图窗口中不能使用两个plot函数,此时可以使用lines函数。
以ggplot2包自带的美国经济数据economics为例,先利用plot函数绘制个人储蓄率随时间变化的时序图,再利用lines在图上增加一周内平均失业持续时间的曲线。执行如下代码得到的结果如图3-15所示。

> data(economics, package = "ggplot2")
> attach(economics)                #将economics加载到内存
> plot(date,psavert,type="l",ylab="",ylim=c(0,26))    #绘制psavert随时间变化的时序图
> lines(date,uempmed,type="l",col="blue")    #绘制uempmed曲线,并设置为蓝色
> detach(economics)                #将economics从内存中移除

image

  1. abline函数绘制直线
    使用abline函数可以在已有图形中添加参考直线。abline函数的基本形式是:
abline(a = NULL, b = NULL, h = NULL, v = NULL, reg = NULL,
       coef = NULL, untf = FALSE, ...)

abline函数的参数如表3-8所示。
image

执行以下代码,将在散点图上增加一条线性拟合直线。绘制的结果如图3-16所示。

> attach(iris)
> # 绘制一幅简单的散点图
> plot(Petal.Length~Petal.Width)
> # 绘制Petal.Length变量均值的水平线
> abline(h=mean(Petal.Length),col="gray60")
> # 绘制Petal.Width变量均值的竖直线
> abline(v=mean(Petal.Width),col="gray60")
> # 绘制拟合直线
> abline(lm(Petal.Length~Petal.Width),
+          col="red",lwd=2,lty=3)
> detach(iris)
相关文章
|
3月前
|
数据挖掘 PyTorch TensorFlow
|
2月前
|
数据挖掘 C语言 C++
R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。
【10月更文挑战第21天】时间序列分析是一种重要的数据分析方法,广泛应用于经济学、金融学、气象学、生态学等领域。R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。本文将介绍使用R语言进行时间序列分析的基本概念、方法和实例,帮助读者掌握R语言在时间序列分析中的应用。
58 3
|
2月前
|
数据采集 数据挖掘 API
Python数据分析加速器:深度挖掘Pandas与NumPy的高级功能
在Python数据分析的世界里,Pandas和NumPy无疑是两颗璀璨的明星,它们为数据科学家和工程师提供了强大而灵活的工具集,用于处理、分析和探索数据。今天,我们将一起深入探索这两个库的高级功能,看看它们如何成为数据分析的加速器。
50 1
|
4月前
|
数据采集 算法 数据挖掘
10余位大佬+10余年经验的结晶:Python数据分析与挖掘实战
LinkedIn 对全球超过3.3亿用户的工作经历和技能进行分析后得出,目前最炙手可热的25 项技能中,数据挖掘排名第一。那么数据挖掘是什么? 数据挖掘是从大量数据(包括文本)中挖掘出隐含的、先前未知的、对决策有潜在价值的关系、模式和趋势,并用这些知识和规则建立用于决策支持的模型,提供预测性决策支持的方法、工具和过程。数据挖掘有助于企业发现业务的趋势,揭示已知的事实,预测未知的结果,因此“数据挖掘”已成为企业保持竞争力的必要方法。 今天给小伙伴们分享的Python数据分析与数据挖掘手册是10余位数据挖掘领域资深专家和科研人员,10余年大数据挖掘咨询与实施经验结晶。从数据挖掘的应用出发,以电力、
10余位大佬+10余年经验的结晶:Python数据分析与挖掘实战
|
4月前
|
数据采集 算法 数据挖掘
10余位大佬+10余年经验的结晶:Python数据分析与挖掘实战
LinkedIn 对全球超过3.3亿用户的工作经历和技能进行分析后得出,目前最炙手可热的25 项技能中,数据挖掘排名第一。那么数据挖掘是什么? 数据挖掘是从大量数据(包括文本)中挖掘出隐含的、先前未知的、对决策有潜在价值的关系、模式和趋势,并用这些知识和规则建立用于决策支持的模型,提供预测性决策支持的方法、工具和过程。数据挖掘有助于企业发现业务的趋势,揭示已知的事实,预测未知的结果,因此“数据挖掘”已成为企业保持竞争力的必要方法。 今天给小伙伴们分享的Python数据分析与数据挖掘手册是10余位数据挖掘领域资深专家和科研人员,10余年大数据挖掘咨询与实施经验结晶。从数据挖掘的应用出发,以电力、
114 13
|
4月前
|
数据可视化 数据挖掘 数据处理
R语言函数与自定义函数:提高代码的复用性
【8月更文挑战第27天】 自定义函数是R语言编程中不可或缺的一部分,它们通过封装复杂的逻辑和提供灵活的参数化设计,极大地提高了代码的复用性和可维护性。通过掌握自定义函数的基本语法和高级技巧,我们可以编写出更加高效、可读的R语言代码,从而更好地应对复杂的数据分析和统计建模任务。
|
4月前
|
机器学习/深度学习 数据可视化 数据挖掘
为啥我敢说Python是数据分析界的扛把子语言?
为啥我敢说Python是数据分析界的扛把子语言?
|
3月前
|
数据采集 机器学习/深度学习 数据可视化
R语言从数据到决策:R语言在商业分析中的实践
【9月更文挑战第1天】R语言在商业分析中的应用广泛而深入,从数据收集、预处理、分析到预测模型构建和决策支持,R语言都提供了强大的工具和功能。通过学习和掌握R语言在商业分析中的实践应用,我们可以更好地利用数据驱动企业决策,提升企业的竞争力和盈利能力。未来,随着大数据和人工智能技术的不断发展,R语言在商业分析领域的应用将更加广泛和深入,为企业带来更多的机遇和挑战。
|
7月前
|
数据可视化 数据挖掘 API
【R语言实战】聚类分析及可视化
【R语言实战】聚类分析及可视化
|
7月前
|
机器学习/深度学习 数据可视化
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为2
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为