在研究中,我们需要处理大型的数据集,这时候使用简单散点图、直方图等图形时可能就不太合适了。
今天来学习一个表示高密度的图形。
1. 加载数据集
今天使用的是car包里面的Vocab数据集,数据集包含3万多行和4列变量。
install.packages("car") # 安装包
library(car) # 加载R包
attach(Vocab) # 绑定数据集
head(Vocab) # 查看数据集前六行
# year sex education vocabulary
# 19740001 1974 Male 14 9
# 19740002 1974 Male 16 9
# 19740003 1974 Female 10 9
# 19740004 1974 Female 10 5
# 19740005 1974 Female 12 8
# 19740006 1974 Male 16 8
数据集中的变量为性别、出生年月、教育、词汇测验分数等,较为简单。
2. 绘制简单散点图
上面的数据集包含了4个变量,我们可以研究词汇分数和受教育程度之间的关系,正常来讲,教育程度较低的人词汇分数也会比较低。
我们可以使用散点图来显示这种关系,代码如下:
plot(Vocab$education, Vocab$vocabulary,
main = "R语言统计与绘图 公众号")
如上图所示,因为数据集中观测对象过多,在图上看不到线性关系,也看不到其他关系。
在前面绘制带状图时,有一个指定抖动的参数(jittering)来分离重合的散点,在这里我们使用这个参数来重新绘制散点图试试。
sp(Vocab$education, Vocab$vocabulary, # 绘图数据
jitter = list(x = 2, y = 2), # 抖动位置参数
smoother = F, spread = F, reg.line = F,
main = "R语言统计与绘图 公众号")
可以看到,相比较于前面的图形,这幅图是可以看到线性关系是存在的。
这里面比较关键的参数就是jitter = list(x = 2, y = 2)
,可以修改里面的数字,看看其他效果。
3. 绘制太阳花图
前面的图形看起来不怎么友好,可以使用其他图形来替代,比如说太阳花图(sunflower plot),也可以叫做向日葵散点图。
太阳花图是在特定的图形位置上使用不同的字符。
sunflowerplot(Vocab$education, Vocab$vocabulary, # 绘图数据
main = "R语言统计与绘图 公众号", # 标题
col.main = "deepskyblue3", # 标题颜色
xlab = "受教育程度", # x轴标签
ylab = "词汇分数") # y轴标签
上面的太阳花图看起来有点像带抖动的散点图。
我们可以试着解读下这张图片:
先看图上最左上角的点,这是1个黑点,该黑点上方和下方都有1个红色花瓣,这两个红色花瓣表示2个观察对象,意味着在3万多名观测对象中,有2个人没有受过教育,但是词汇分数很高。
同样,在最右下角,有1个黑点,有3片红色花瓣,表示有3个观测对象,意味着在3万多名观测对象中,有3个人受过高等教育,但是词汇分数很低,为0。
黑点周围的红色花瓣数目越多,表示该点的观测对象越多,红色实心圆圈表示有很多很多的观测对象。
从这张图上,我们也可以看到,受教育程度越高,词汇分数越高,这种关系是存在的。
4. sunflowerplot()函数解释
sunflowerplot(x, y = NULL, number, log = "", digits = 6,
xlab = NULL, ylab = NULL, xlim = NULL, ylim = NULL,
add = FALSE, rotate = FALSE,
pch = 16, cex = 0.8, cex.fact = 1.5,
col = par("col"), bg = NA, size = 1/8, seg.col = 2,
seg.lwd = 1.5, ...)
## 函数解释
x, y # 绘图用的x轴,y轴变量,长度应一致
number # 长度为n的整数向量
log = "" # 表示对数坐标比例的字符。
digits = 6 # 有效数字位数
xlab, ylab # x轴、y轴标签
xlim, ylim # x轴、y轴的范围
add # 逻辑词,将图形添加到先前的图形上
rotate # 逻辑词,为TRUE,则随机旋转太阳花图
pch # 设置太阳花中心点的绘图字符
cex # 设置太阳花中心点绘图字符的缩放倍数
cex.fact # 有太阳花叶时中心点绘图字符的缩放倍数
col # 设置颜色
bg # 设置背景
size # 太阳花叶也就是太阳花瓣的大小
seg.col # 设置太阳花叶的枝干颜色
seg.lwd # 设置太阳花叶的枝干粗细
参考资料
- Graphing Data with R.John Jay Hilfiger著.
- sunflowerplot()函数帮助文件
既往专辑