R语言
语言学与R语言的碰撞
Xu & Yang
PhoneticSan
学习参考
Discovering Statistics Using R
Statistics for Linguistics with R
How to Do Linguistics with R
R in Action
Analyzing Linguistic Data
R Graphics Cookbook
··· ···
Recap
可以使用plot( )函数进行基础的制图。
调用ggplot2包可以使用ggplot( )函数进行数据可视化,函数的基本原理是多个图层的叠加,使用+可以不断叠加需要的图层。
使用facet_grid( )和facet_wrap( )函数可以将数据分组可视化,以便更直观地观察繁多的数据。
R: The R Project for Statistical Computing
https://www.r-project.org/
IDE:
https://rstudio.com/
注:本文参考R Graphics Cookbook一书第五章与Discovering Statistics Using R第四章第五节
R Project
Linguistics
1
散点图概述
对于散点图我们并不陌生,在Excel中我们也经常看到它的身影。在上一篇可视化初阶的文章中,我们看到使用geom_point( )函数就可以指定成为散点图了。为了方便起见,我们使用gcookbook包中的数据来做一次最基本的散点图。如果没有安装过这个包,请记得使用intall.packages( )函数安装,然后使用library( )函数加载gcookbook和ggplot2两个包。下面我们要画的是heightweight中的数据。为了方便操作,我们可以使用summary( )函数先看看这个数据里都有什么内容。可以看到里面有这样几项:性别、年、月、身高、体重。我们先以ageYear和heightIn为例画散点图。
运行结果
我们使用上一篇所提到的ggplot函数来进行数据可视化操作。首先,我们告诉ggplot( )函数要画图的数据源,然后在aes( )中设定好我们的x轴和y轴,最后在叠加一个散点图层,这样就完成散点图的基本操作了。
基本的散点图
根据之前提到的,很多时候我们的数据想要展示众多内容,比如,我想在一个数据图里既展示性别,又展示年份增长的身高,这时候,我们可以使用不同的形状和颜色来进行区分。比如我们以颜色进行性别区分,那么保证数据中“性别”数据是以factor形式存在的,然后我们直接加入color=sex即可,也就是把分颜色的任务交给R去做,运行结果如下。当然,你也可以使用shape=sex用形状进行区分,运行结果你可以自己试一试。
性别分组散点图
这时候有的人就会想法更大了:你看这个heightweight数据中,既然有身高和体重,如果我想有性别分组的时候,还加入体重,该怎么办呢?其实很简单,我们回顾一下ggplot( )函数中我们可以选择的图形对象,有线条、大小、形状等等,我们不妨使用size来实验一下,可以看到,横坐标是ageYear,纵坐标是heightIn,我们以颜色区分了性别,大小区分了体重。
颜色区分性别,大小区分体重
或者,我觉得这样不好看,我用形状来区分性别,用颜色深浅来区分不同的体重,我们可以看到,R会自动帮我们进行颜色深浅的标示体重,具体运行结果如下所示。
形状区分性别,颜色区分体重
不过,这样看起来不太美观,我们见到很多图都是看起来美美的,略带透明感的图标,能不能实现?当然可以,而且实现起来很方便。我们又要回到上一篇中提到的众多图形参数中,有一个参数你肯定很奇怪:alpha,这是调整图形透明度的,范围是[0,1],加入这个我们就可以看到它的透明度发生了变化。
调整透明度
在散点图中,还有很多属性还没有挖掘到,我们日后会慢慢介绍更多的散点图操作,如添加回归曲线,添加置信区间等等,这些操作都是在这些美化基础之上得到的。因此,我们要把这些散点图最基本的元素牢牢记住。
R Project
Linguistics
2
声学元音图
在语音的元音研究中,最常见的一个图就是声学元音图,它的横纵坐标分别表示了F1和F2的数值,从而更加清晰地表明该语言元音的大体分布。其实我们仔细掰开来想,声学元音图本质上是调换了坐标轴方向的散点图,因此我们可以使用ggplot( )函数中的散点图写出脚本,轻松地绘制出我们所需要的声学元音图,不必每次都打开Excel和画图一点点绘制。
林茂灿(2005) 汉语语音研究的几个问题
首先,我们先“搞到”一些元音的共振峰数据,此处我们使用了六个元音的F1和F2数值,一共有三列数据:元音、F1、F2。在载入数据前,务必记得载入ggplot2包,这样我们才能使用ggplot( )函数。
元音原始数据
下面我们就可以准备开始画图了。首先,我们需要确定好横纵坐标。根据我们之前看到的声学元音图,可以发现横坐标是F2,纵坐标是F1,我们可以使用不同形状或颜色来表示不同的元音,那么运行结果如下图所示。
散点图初步设置
可以很清楚地看到,这和我们传统上的声学元音图不一样,因为我们习惯性用左上角来标示/i/,从而体现它舌位前和高的特性,那么我们需要把这个坐标轴进行调换,调换所使用的函数名也很简单,分别是scale_x_reverse( )和scale_y_reverse( )函数,括号内表明调换的位置,比如我们这里需要把横坐标放到上边,纵坐标放到右边,这样我们就可以得到这样的图形了。
调换后的声学元音图
调换完后,其实这个图已经比较接近了。但是,我不想让点成为我的标签,或者形状成为标签,我想直接使用对应的元音音标成为标签可以吗?当然可以。在上一篇我们介绍不同的图形对象的时候,有一个geom_text( )函数,它可以实现用文本来标示我们需要的内容。那么,我们把geom_point( )函数替换为geom_text( ),同时我们需要告诉这个函数我们的标签(label)是什么,因此我们在aes( )函数中,表明我们的label来源于我们数据中vowel这一列。同时,我们既然已经用音标来表示数据了,我们可以添加theme( )函数来隐藏掉旁边的那个烦人的数据标签,具体代码为theme(legend.position="none")即可,那么运行结果就比较好看了。
直接使用音标表示数据
最后,我们再画上表示这个音标范围,也就是那个椭圆来表示置信水平,我们使用stat_ellipse( )函数即可,什么参数也不设置的话,就是用实线来圈起来,我们可以设置线型(linetype),也可以设置填充色(填充色以标签为准,那么fill=vowel)等等,最终我们可以得到完整的声学元音图。保存我们写好的脚本,以后再进行声学元音图的绘制,直接导入数据,点击运行就可以实现了。
—END—
排版:Xu & Yang