第二篇:数据可视化 - 基本API

前言

       数据可视化是数据挖掘非常重要的一个环节,它不单在查阅了解数据环节使用到,在整个数据挖掘的流程中都会使用到。

       因为数据可视化不单可以形象地展示数据,让你对数据有更好的总体上的了解,而且还可以让你清晰的将自己的观点表述出来。因此不仅仅是在项目实施环节,在与客户谈需求或者写论文时,数据可视化也能帮到你。

       但在介绍统计图的具体绘制之前,先来看看两个基本的图像绘制函数plot和legend。

绘图基础函数 - Plot

       在R语言中,plot是基本的用来绘制点和线段的函数。

       最基本的调用方式为:plot (x轴数据, y轴数据)。然而plot还提供了很多参数供以优化:

pch:用于显示点的坐标,可以是一个字符,也可以是0到25的一个整数。如:pch=“+”,pch=1
lty:线条类型。如:lty=2,lty=1
lwd:线条宽度。如:lwd=2
col:点,线,文本,填充区域的颜色设置,col.axis, col.sub, col.main分别对应坐标轴标注,子标题,主标题颜色。如col=2, col.sub=2
font:字体设置。同上
cex:字符扩张率,这个值表示期望字符(包括绘图字符)大小相对默认大小的比率。
xlim和ylim:表示x轴和y轴的长度,如:plot(passign, type="l", xlim=c(0,100))就表示x轴坐标是从0到一百。
add=TRUE 强制函数以低级绘图函数的形式运行,在当前的图上加载新的图形元素(仅适合于部分函数)。
axes=FALSE 禁止产生坐标轴|当你想用函数axis() 绘制个性化的坐标轴时非常有用。默认值是axes=TRUE,表示产生坐标轴
log:log="x",log="y", log="xy"让x 轴,y 轴或者两者都成为对数坐标轴,这对很多图都有效,但不是全部。
type= 参数type= 控制输出图形(特别是线条)的类型:
type="p" 只显示点(默认)
type="l" 显示线条
type="b" (同时)显示点和线
type="o" 将点覆盖在线上
type="h" 绘制从点到零轴(x 轴)的垂直线(高密度(high-density))
type="s"
type="S" 步阶图。第一种形式,垂直线顶部匹配数据点;第二种形式,底部匹配。
type="n" 图形不显示。但是坐标轴仍然显示(默认),并且坐标依然以数据设定。这个非常适合随后用低级绘图函数画图。
xlab=string/ylab=string:设定x 和y 轴的标签。可以用这些参数修改默认标签。默认标签常常是用于高级绘图函数中的对象的名字。

       在plot函数的基础之上,可以画点,画线,添加文本。画点和画线的函数分别为points和lines函数,其调用方式比较简单,这里不再细说。

       下面再来介绍另一个重要的绘图函数。

绘图基础函数 - legend

       legend(x, y, legend, ...)用来在当前图的特定位置增加图例(legend)。标识字符,线条格式,颜色等都是被字符向量legend中的标签所注释。另外一个含有画图单位对应值的参数v (一个和legend 长度一致的向量)是必须给定的:

legend( , fill=v)
- 填充盒子的颜色
legend( , col=v)
- 点或者线条的颜色
legend( , lty=v)
- 线条样式
legend( , lwd=v)
- 线条宽度
legend( , pch=v)
- 标识字符(字符向量)

直方图

       

       使用hist函数可以绘制出某列变量的直方图,效果如上图所示。它是保险索赔数据库中索赔金额的直方分布图。

       该图的函数调用代码为:

           

hist函数有以下几个参数:
- 首参:数据向量
- density:直方图阴影系数。值越大阴影度越高。
- main:直方图标题名。如上图的"Histogram of Freq of Insurance$Claims"。
- xlab:横轴名
- ylab:纵轴名
- col,border:直方图的颜色以及边界颜色。可自定义色调风格,但是与density参数互斥。
- break:分组间距

条形图

       

       该图是保险索赔数据集中索赔人年龄的条形分布图。

       可见,条形图与直方图比较相似,但它的特点是需要定制每个区间,因为这些区段之间表达的意义也许是没有任何联系的。同时,它可以很好地处理非数值型的数据统计。因此,这种图形的使用频率也相当高,应当引起重视。

       一般来说,绘制条形图需要以下两个步骤:

1. 生成统计向量。也就是说,每个条形表示的值具体是多少。
本例中的调用代码为:

       

       生成的向量为索赔人年龄在各个区间内的人数。

       2. 进行绘制。

       调用代码为:

       

       barplot函数有以下几个参数:

- 首参:数据向量,这个常常需要自行计算来定制。
- names.arg:各条形的名字
- density,main,xlab,ylab,col,denstity:意义同直方图。不过col,denstity参数为向量格式 - 为了分别定制每个条形。
- besides:是绘制分组条形图,还是堆叠条形图。该参数的具体使用下面会说。

需要特别说明的是,柱状图更为常用的地方在于绘制分组条形图,如下图所示:

       

       要绘制这种条形图,在上图的基础上,需要作出如下的改动:

       1. 生成两组统计向量,并将它们通过函数rbind给绑定起来:

       

       2. 在绘制函数barplot中,加入参数设定beside=TRUE:

       

       如果不加的话会自动生成叠加风格的条形图:

       

       3. 最后,在图的左上方加上这不同两个条形的具体意义:

       

 饼图

       

       本例子展示的是一个3D图。它需要使用一个新的包plotrix。饼图的绘制比较简单,调用代码示例如下:

       

       主要说明的是如下两个参数:

       - explode:这个参数就是各个饼成员之间的间距
       - labelcex:各个饼之间的缝隙大小

       其他参数和前面几个图的绘制函数的差不多,不再累述了。

中文字符兼容性解决方案

       在导出为高清pdf格式的时候,有时候会有中文字符不兼容的问题。解决方案为:

1. 安装Cario软件包并加载
2. 调用函数CairoPDF("PDF完整路径名")指定PDF文件保存路径及文件名
3. 在调用绘图函数时加上一个新的参数 family = "字体名"。字体参数表见文章尾部。
4. 语句dev.off执行保存

       下面是一段保存高清pdf的代码示例:

library(Cairo)
CairoPDF("f:\\1.pdf")
pie3D(Claims_Age, labels=c("<25", "25-29", "30-35", ">35"), explode = 0.1, labelcex = 0.8, main = "中文字符", col = c("green", "blue", "orange", "yellow"), family = "SimSun")
dev.off()

小结

       R语言还支持很多类型的图,有些复杂点的图甚至独立成了一个专门的包。可根据实际的需要进行选择并绘制。

附字体参数表:

1 新细明体 PMingLiU
2 细明体 MingLiU
3 标楷体 DFKai-SB
4 黑体 SimHei
5 宋体 SimSun
6 新宋体 NSimSun
7 仿宋 FangSong
8 楷体 KaiTi
9 仿宋_GB2312 FangSong_GB2312
10 楷体_GB2312 KaiTi_GB2312
11 微软正黑体 Microsoft JhengHei
12 微软雅黑 Microsoft YaHei
13 隶书 LiSu
14 幼圆 YouYuan
15 华文细黑 STXihei
16 华文楷体 STKaiti
17 华文宋体 STSong
18 华文中宋 STZhongsong
19 华文仿宋 STFangsong
20 方正舒体 FZShuTi
21 方正姚体 FZYaoti
22 华文彩云 STCaiyun
23 华文琥珀 STHupo
24 华文隶书 STLiti
25 华文行楷 STXingkai
26 华文新魏 STXinwei

posted @ 2017-05-20 19:52  穆晨  阅读(2420)  评论(0编辑  收藏  举报