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

3.3 高级绘图函数

大部分高级绘图函数均有add参数(plot函数没有)。如果add=FALSE(默认),则在新窗口中创建一个图形;如果add=TRUE,则在当前活动窗口中的原有图形之上叠加图形。在基础包中,R提供了绘制常见图形的功能,包括散点图、气泡图、柱状图、饼图、线图,也提供了一些专业的统计图形,如茎叶图、Q-Q图等。表3-9列出了基础包中可以绘制的一些图形。

3.3.1 散点图

1.散点图
R中创建散点图的基础函数是plot(x,y),其中x和y是数值型向量,代表图形中的(x,y)点。如果样本变量只有一个,则需要把x参数设置为样本数据。
下面通过两个小例子来演示。执行以下代码得到的结果如图3-17所示。

> par(mfrow=c(1,2))
> # 绘制一维数据
> plot(x=rnorm(10))
> # 绘制二维数据
> plot(women)
> par(mfrow=c(1,1))

因为左图绘制的是一维数据,所以将数据赋予x参数;右图是二维数据,R将women数据框的第一列变量(height)赋予x参数,第二列变量(weight)赋予y参数,并将变量名作为坐标轴标签。
2.散点图矩阵
散点图矩阵是散点图的高维扩展,它从一定程度上克服了在平面上展示高维数据的困难,在展示多维数据的两两关系时有着不可替代的作用。R中有多种绘制散点图矩阵的函数。plot函数可以绘制散点图矩阵,此外基础包还有专门绘制散点图矩阵的pairs函数。
当把超过两列的数据框赋予plot函数时,就可以绘制散点图矩阵。以鸢尾花数据集的前四列为例进行演示。执行以下代码,得到的图形如图3-18所示。

> # 绘制散点图矩阵
> plot(iris[,1:4],main="利用plot函数绘制散点图矩阵")

从散点图矩阵可以看出,变量Petal.Length与变量Petal.Width有很强的正相关性。
也可以利用pairs函数实现图3-18的效果。代码如下。

> # 方法一
> pairs(iris[,1:4],main="利用pairs函数绘制散点图矩阵")
> # 方法二
> pairs(~Sepal.Length+Sepal.Width+Petal.Length+Petal.Width,
+         data=iris,main="利用pairs函数绘制散点图矩阵")

3.3.2 气泡图

散点图一般只能较好地展示二维数据,气泡图则是在其基础上另外通过散点的大小来表达第三维变量的数值。同样,也可以使用plot函数绘制气泡图,通过将第三个变量赋予参数cex来控制气泡的大小。
从ggplot2包中的钻石数据集diamonds中随机抽取500个样本,绘制简单气泡图进行演示。执行以下代码得到的结果如图3-19所示。

> data("diamonds",package = "ggplot2")
> # 随机抽取500个样本
> diamonds1 <- diamonds[sample(1:nrow(diamonds),500),]
> attach(diamonds1)
> # 计算钻石体积
> volumn <- xyz
> # 把钻石体积进行归一化处理,并赋予对象size
> size <- (volumn-min(volumn))/(max(volumn)-min(volumn))
> # 绘制气泡图
> plot(carat,price,cex=size*2)

也可以用symbols函数来创建气泡图。该函数可以在指定的(x,y)坐标上绘制圆圈图、方形图、星形图、温度计图和箱线图。以绘制圆圈图为例:symbols(x,y,circle=r),其中x、y和circle参数是需要设置的向量,分别表示x轴、y轴和圆圈半径。
现在通过一个小例子来演示。执行以下代码得到的结果如图3-20所示。

> x<-rnorm(10)
> y<-rnorm(10)
> r<-abs(rnorm(10))
> symbols(x,y,circle = r,
+          bg=rainbow(10))

3.3.3 线图

设置plot函数的type参数,将散点图上的点从左往右连接起来,就会得到一个线图。在绘制线图时,type参数可以设置的值如表3-10所示。
执行以下代码,查看不同类型线图的效果。结果如图3-21所示。


3.3.4 柱状图

在R中用barplot函数可以绘制柱状图和条形图。barplot函数的主要参数如表3-11所示。

对1940年弗吉尼亚州的死亡率的数据VADeaths绘制柱状图和条形图,通过参数horiz来控制。执行如下代码得到的结果如图3-22所示。

> par(mfrow=c(1,2))
> for(i in c(FALSE,TRUE)){
+     barplot(VADeaths,horiz = i,beside = T,col = rainbow(5))
+ }
> par(mfrow=c(1,1))

由于多个柱子水平并列展示,所以需要添加图例方便解读数据。可以设置legend.text参数来实现。执行以下代码得到的结果如图3-23所示。

> barplot(VADeaths,beside = T,col = rainbow(5),
+         legend.text = rownames(VADeaths))

3.3.5 饼图

饼图为一个由许多扇形组成的圆,各个扇形的大小比例等于变量各水平的频数比例。饼图比条形图简单,描述比例较直观。其基本形式为:

pie(x,labels=names(x),…)

其中x为画图的非负数值向量,label为生成标签表达式。
如果想查看mtcars数据集中cyl不同数值的占比。执行以下代码得到的结果如图3-24所示。

> pie(table(mtcars$cyl))

3.3.6 直方图和密度图

直方图是定量变量常用的图表之一。其做法是,把横坐标分成若干通常是等宽度的区间,然后计算数据在各个区间上的频数,并在各区间上画出高度与数据在相应区间的频数成比例的矩形条。纵坐标当然也可能是比例而不一定是频数,但这并不改变图的形状,只是纵坐标单位的不同。可以使用hist()函数创建直方图。
hist函数的基本形式为his(x,…),hist函数的主要参数如表3-12所示。

下面举例说明如何利用hist()绘制直方图。
对ggplot2包自带的美国经济数据economics的个人储蓄率和一周内平均失业持续时间绘制直方图。对psavert和uempmed分别绘制了两个图,一个有较少的区间,一个有较多的区间,可以很清楚地看出区间划分对直方图的影响。执行以下代码得到的结果如图3-25所示。

> data(economics, package = "ggplot2")
> attach(economics)     #将economics加载到内存
> par(mfrow=c(2,2))
> hist(psavert,8,xlab="个人储蓄率",ylab="频数",col="blue",
+        main="个人储蓄率直方图(较少区间)")
> hist(psavert,30,xlab="个人储蓄率",ylab="频数",col="blue",
+        main="个人储蓄率直方图(较多区间)")
> hist(uempmed,8,xlab="一周内平均失业持续时间",ylab="频数",col="green",
+        main="一周内平均失业持续时间(较少区间)")
> hist(uempmed,30,xlab="一周内平均失业持续时间",ylab="频数",col="green",
+        main="一周内平均失业持续时间(较多区间)")
> par(mfrow=c(1,1))
> detach(economics)     #将economics从内存中释放

有一种与直方图有密切关系的图,即密度图。很多统计学家都建议用密度图代替直方图,因为密度图更容易解读。首先要用density函数计算核密度估计量,然后用plot函数画出估计量。其基本形式为plot(density(x))。
核密度图经常会加上rug。rug是用于绘制坐标轴密度线的函数,实际上就是在坐标轴上添加一条图形,用短线段表示一个点。

继续以economics为例,绘制个人储蓄率的核密度图,并添加轴须图。执行以下代码得到的结果如图3-26所示。

> plot(density(economics$psavert))
> rug(economics$psavert)

3.3.7 Q-Q图

Q-Q(Quantile-Quantile)图会将样本数据的分布与理论分布(通常是正态分布)做比较,即Q-Q图会画出样本的分位数和理论分布的分位数。如果样本数据的分布和理论分布一致,那么所有的点都会在从左下角到右上角的45°对角线上。Q-Q图可以有效地判断实际分布和期望分布的差异。在R中可以用qqnorm函数绘制Q-Q图。
继续以economics为例,绘制个人储蓄率的Q-Q图。执行以下代码得到的结果如图3-27所示。

> qqnorm(economics$psavert)

3.3.8 箱线图

箱线图(又称盒形图)通过绘制连续变量的最小值、下四分位数Q1(第25百分位数)、中位数(第50百分位数)、上四分位数Q3(第75百分位数)以及最大值,描述连续型变量的分布。它是由一个盒子(box)和两边各一条线(whisker)组成。如果箱线图是竖直的,那么盒子上下边分别代表Q1和Q3,显然,有约一半的中间大小的数据值落在盒子的范围内。在盒子中间有一条线,这是中位数,盒子的长度等于上下四分位数之差,称为四分位间距或四分位极差(IQR)。在1.5倍IQR范围外的点,箱线图都识别为异常值,故箱线图也是异常值甄别常用的手段之一。在R基础包中用boxplot函数可以绘制箱线图。
以鸢尾花数据集iris为例,绘制花萼长度按照物种分类的箱线图。执行以下代码得到的结果如图3-28所示。

> boxplot(iris$Sepal.Length~iris$Species,col=rainbow(3))

可见,种类setosa的数据整体明显低于其他两个种类,且种类virginica有一个异常点,故箱线图也是用来识别一组数据是否有异常点的常用方法之一。

3.3.9 茎叶图

茎叶图(stem-and-leaf plot)在数据量不大的情况下,既显示了完整的原始数据,又显示了数据分布的状态,它像一片带有长短不一的叶子的茎。在R中用stem函数绘制茎叶图。
以汽车数据集mtcars数据的汽车重量wt为例进行说明。执行以下代码。

> stem(mtcars$wt)

  The decimal point is at the |

  1 | 5689
  2 | 123
  2 | 56889
  3 | 22224444
  3 | 55667888
  4 | 1
  4 |
  5 | 334

结果中的第一行1 | 5689表示wt数据有1.5、1.6、1.8、1.9,其他行以相同方式解读。

3.3.10 点图

点图提供了一种在简单水平刻度上绘制大量有标签值的方法,可以用dotchart函数创建点图。其基本格式为:dotchart(x,labels=)。其中x是一个数值向量,labels是由每个点的标签组成的向量。
继续以汽车数据集mtcars的每加仑英里数mpg数据为例进行说明。执行以下代码得到的结果如图3-29所示。

> dotchart(mtcars$mpg,labels = rownames(mtcars))

3.3.11 马赛克图

马赛克图常用于描绘列联表那样的数据。R基础包中的mosaicplot()函数可以绘制马赛克图。
以Titanic数据集为例,它包含了存活或者死亡的乘客数,乘客的船舱等级、性别以及年龄层。执行以下代码,查看分类细节。

> ftable(Titanic)
                   Survived  No Yes
Class Sex    Age
1st   Male   Child            0   5
             Adult          118  57
      Female Child            0   1
             Adult            4 140
2nd   Male   Child            0  11
             Adult          154  14
      Female Child            0  13
             Adult           13  80
3rd   Male   Child           35  13
             Adult          387  75
      Female Child           17  14
             Adult           89  76
Crew  Male   Child            0   0
Adult          670 192
      Female Child            0   0
             Adult            3  20

执行以下代码绘制马赛克图,结果如图3-30所示。

> mosaicplot(Titanic)

从上面的马赛克图可以看出,大部分孩子都处在二等舱和三等舱;在头等舱的大部分女性都存活下来,而三等舱中仅有一半女性存活。
除了基础包中的mosaiplot函数可以绘制马赛克图外,vcd包中的mosaic( )函数也可以绘制马赛克图,它具有更多扩展功能。
同样以Titanic数据集为例,执行以下代码得到的马赛克图如图3-31所示。

> library(vcd)
载入需要的程辑包:grid
> mosaic(Titanic,shade = T,legend = T)

扩展的马赛克图添加了颜色和阴影面积来表示拟合模型的残差值。蓝色阴影表明,在假定生存率和船舱等级、性别和年龄段无关的条件下,该类别的生存率通常超过预期值。

时间: 2024-11-01 15:31:56

《R语言游戏数据分析与挖掘》一3.3 高级绘图函数的相关文章

《R语言游戏数据分析与挖掘》一2.2 数据对象

2.2 数据对象 R拥有许多用于存储数据的对象类型,包括向量.矩阵.数组.数据框和列表.它们在存储数据的类型.创建方式.结构复杂度,以及用于定位和访问其中个别元素的标记等方面均有所不同.多样化的数据对象赋予了R灵活处理数据的能力. R中有许多数据类型用来存储各种各样的数据,包括数值型(numeric).逻辑型(logical).日期型(date).字符型(character).复数型(complex).原味型(二进制形式保存数据raw).此外,也可能是缺省值(NA)和空值(NULL).其中最经常

《R语言游戏数据分析与挖掘》一导读

前 言 为什么要写这本书 随着大数据的概念越来越流行,越来越多的企业开始重视数据,期待从数据中寻找有价值的结论,以指导公司管理层决策,最终创造更大的价值.但是在游戏行业,数据分析的发展相对缓慢,很多游戏公司是在发现人口红利消失后才逐渐重视数据,希望利用数据驱动产品.而在各种数据分析技术中,R语言作为一个可进行交互式数据分析和探索的强大平台,拥有举足轻重的作用.R语言的免费开源使得很多公司用它来处理数据.展示数据.分析数据.完成模型. 使用R语言可以进行游戏数据分析系统的搭建,可以对累积的海量游戏

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

3.2 低级绘图函数 R还可以通过函数在现有图形的基础上增加一些额外的内容,如添加标题.绘制坐标轴.在特定的位置增加图形(如辅助线,拟合线)或文字等.这些函数在R中称为低级作图命令(low-level plotting command). 3.2.1 标题 除了图形参数,许多高级函数(如plot.barplot.boxplot.qqnorm)也允许自行设定坐标轴和文本选项.以下代码在图形上添加了主标题(main).副标题(sub).坐标轴标签(xlab.ylab),结果如图3-9所示. > at

《R语言游戏数据分析与挖掘》一3.4 小结

3.4 小结 本章首先学些了如何向简单图形中添加各种图形元素,并对元素的颜色.形状.大小等参数进行设置,然后利用R的高级绘图函数绘制各种类型图形.

《R语言游戏数据分析与挖掘》一2.1 开发环境准备和快速入门

2.1 开发环境准备和快速入门 2.1.1 R语言简介 R语言的前身是S语言,S语言是由AT &T Bell实验室的Rick Becker.John Chambers和Allan Wilks开发的一种用来进行数据探索.统计分析.作图的解释型语言.最初S语言的实现版本主要是S-PLUS.S-PLUS是一个商业软件,它基于S语言,并由MathSoft公司的统计科学部进一步完善.而R语言最初由来自新西兰大学的Ross Ihaka和Robert Gentleman开发(由于他们的名字都以R开头,所以该软

《R语言游戏数据分析与挖掘》一1.2 游戏数据分析的流程

1.2 游戏数据分析的流程 游戏数据分析.数据挖掘的价值一定要落实到具体的业务应用中才可以得到检验和实现,所以需要流程和制度来有效保障最终的业务实践效果.这些流程一方面可以促使各相关方在数据分析业务实践的不同阶段落实各自的角色.分工和价值,维护整个业务流的畅通和效率:另一方面可以有效达成数据分析项目中各环节的阶段性目标. 游戏数据分析整体流程可以参考跨行业的数据挖掘标准流程CRISP-DM方法论,它是一种业界认可的用于指导数据挖掘工作的方法.按照CRISP-DM方法论,一个游戏数据分析的完整流程

《R语言游戏数据分析与挖掘》一1.1 为什么要对游戏进行分析

1.1 为什么要对游戏进行分析 伴随着游戏互联网的快速发展和智能终端的普及,移动游戏进入了全民时代.越来越多的玩家利用碎片化时间进行游戏,使得游戏数据呈现井喷式增长,同时也对数据存储技术.计算能力.数据分析手段提出了更高的要求.海量数据的存储是必须面对的第一个挑战,随着分布式技术的逐渐成熟,越来越多的互联网企业采用分布式的服务器集群+分布式存储的海量存储器进行数据的存储和计算,从而解决数据存储和计算能力不足的问题.如何在海量的.复杂高维的游戏数据中发掘出有价值的知识,将是很多公司下一步亟待解决的

《R语言游戏数据分析与挖掘》一3.1 常用图形参数

3.1 常用图形参数 R是一个功能强大的图形构建平台,可以逐条输入语句构建图形元素(颜色.点.线.文本等),逐渐完善图形,直至得到想要的结果. 更改图形参数有两种方式,一种是直接在绘图函数中设置参数,这种方式只影响当前的绘图函数:另一种是通过par()函数设置,这种方式会影响当前绘图设备上的所有图形. 3.1.1 颜色元素 R语言可以设置绘图参数col,改变图像.坐标轴.文字.点.线等的颜色.例如,对数据集women绘制红色散点图,只需将col参数设置为"red",如图3-1所示. &

《R语言游戏数据分析与挖掘》一第2章 必备R语言基础

第2章 必备R语言基础 本章将介绍R语言的基础知识,包括三大部分的内容:第一部分是R语言的简介.R及常用编辑器的安装及使用:第二部分是R语言的数据对象的创建数据:第三部分是数据的导入.