描述数据分布01

Part1 1.1~1.4

目录

  • 1.1 绘制简单直方图
  • 1.2 基于分组数据绘制分组直方图
  • 1.3 绘制密度曲线
  • 1.4 基于分组数据绘制分组密度曲线
  • 1.5 绘制频数多边形
  • 1.6 绘制基本箱线图
  • 1.7 向箱线图添加槽口
  • 1.8 向箱线图添加均值
  • 1.9 绘制小提琴图
  • 1.10 绘制Wikinson点图
  • 1.11 基于分组数据绘制分组点图
  • 1.12 绘制二维数据的密度图

1.1 绘制简单直方图

这里faithful是记录了“老忠实”喷泉的喷发时长和两次喷发间隔,是一个连续性变量,绘制直方图可以使得在一个等待区间内喷发次数(历史统计了272组数据)

library(ggplot2)
faithful
# eruptions waiting
# 1     3.600      79
# 2     1.800      54
# 3     3.333      74
# 4     2.283      62
# 5     4.533      85
# 6     2.883      55
ggplot(faithful, aes(x=waiting)) +
  geom_histogram()
fig-1.1.1.png

上面是默认情况下
(1)可以使用binwidth参数来修改组距
(2)将数据切分为指定的分组数目
(3)直方图默认的填充颜色是黑色,且没有边框线,这里面fill修改填充颜色,colour修改边框颜色

# 设定组距为5,(fig-1.1.2.png)
ggplot(faithful, aes(x=waiting)) +
  geom_histogram(binwidth=5, fill="white", colour="black")

# 将x的取值切分为15组(fig-1.1.3.png)
binsize = diff(range(faithful$waiting))/15
ggplot(faithful, aes(x=waiting)) +
  geom_histogram(binwidth=binsize, fill="grey", colour="blue")
fig-1.1.2.png

fig-1.1.3.png

基本绘图结果可以保存为变量以便于重复使用,同时boundary参数可以设定分组原点,当boundary=31时,组边界为31,39,47等(fig-1.1.4.png),而在fig-1.1.5.png中分组原点为35,则组边界为35,43,51等。

h = ggplot(faithful, aes(x=waiting))
h + geom_histogram(binwidth=8, fill="white", colour="black", boundary=31)
h + geom_histogram(binwidth=8, fill="white", colour="black", boundary=35)
fig-1.1.4.png
fig-1.1.5.png

1.2 基于分组数据绘制分组直方图

绘制分组直方图使用geom_histogram()函数+分面绘图

# 载入需要使用的数据
library(MASS)
head(birthwt)
# low age lwt race smoke ptl ht ui ftv  bwt
# 85   0  19 182    2     0   0  0  1   0 2523
# 86   0  33 155    3     0   0  0  0   3 2551
# 87   0  20 105    1     1   0  0  0   1 2557
# 88   0  21 108    1     1   0  0  1   2 2594
# 89   0  18 107    1     1   0  0  1   0 2600
# 91   0  21 124    3     0   0  0  0   0 2622

# 使用smoke作为分面变量(fig-1.2.1.png)
ggplot(birthwt, aes(x=bwt)) +
  geom_histogram(fill="white", colour="black") + 
  facet_grid(smoke ~ .)
fig-1.2.1.png

上面的分面标签为0和1,不看代码不清楚是smoke的取值,最好修改分面标签,修改需要修改因子水平的名称
(1)首先列出现有的因子水平
(2)按照相同的顺序赋予新的名字

# 复制一个数据副本,避免错误操作丢失原始数据
birthwt1 = birthwt
# 将smoke转化为因子
birthwt1$smoke = factor(birthwt1$smoke)
levels(birthwt1$smoke)

# 导入plyr包,调用revalue()函数,将0和1
# 替换为No Smoke和Smoke
library(plyr)
birthwt1$smoke = revalue(birthwt1$smoke, c("0"="No Smoke", "1"="Smoke"))
ggplot(birthwt1, aes(x=bwt)) +
  geom_histogram(fill="white", colour="black") + 
  facet_grid(smoke ~ .)
fig-1.2.2.png

分面绘图时,个分面的y轴标度是相同的。当按照出生体重race进行分组时(fig-1.2.3.png)

ggplot(birthwt, aes(x=bwt)) +
  geom_histogram(fill="white", colour="black") + 
  facet_grid(race ~ .)
fig-1.2.3.png

如果不同分组想使用不同的标度,可以使用scales="free",这个设置只适合y轴,x轴不会改变(fig-1.2.4.png)

ggplot(birthwt, aes(x=bwt)) +
  geom_histogram(fill="white", colour="black") + 
  facet_grid(race ~ ., scales="free")
fig-1.2.4.png

分组绘图的另一种做法是把分组变量映射给fill,但是分组变量必须是因子型或者字符型(这里使用上面的birthwt1变量,smoke已经是因子型)(fig-1.2.5.png)

birthwt1$smoke = factor(birthwt1$smoke)
# 把smoke映射给fill,取消条形堆叠,并使图形半透明,alpha为1的不透明
ggplot(birthwt1, aes(x=bwt, fill=smoke)) +
  geom_histogram(position="identity", alpha=0.4)
fig-1.2.5.png

1.3 绘制密度曲线

使用geom_density()函数,并映射一个连续型变量到x(fig-1.3.1.png)

ggplot(faithful, aes(x=waiting)) +
  geom_density()
fig-1.3.1.png

核密度曲线是基于样本数据对总体分布做出的一个估计。曲线的光滑程度取决于核函数的带宽:带宽越大,曲线越光滑。带宽可以通过adjust参数进行设置,其默认值为1(fig-1.3.2.png)

ggplot(faithful, aes(x=waiting)) +
  geom_line(stat="density", adjust=.25, colour="red") +
  geom_line(stat="density") +
  geom_line(stat="density", adjust=2, colour="blue")
fig-1.3.2.png

可以使用xlim(a, b)设置x轴范围(fig-1.3.3.png)

ggplot(faithful, aes(x=waiting)) +
  geom_density(fill="blue", alpha=.2) +
  xlim(35, 105)
fig-1.3.3.png

可以将密度曲线绘制到更高一层的图层上,通过设置y=..density..可以减小直方图的标度以使其余密度曲线相匹配。

ggplot(faithful, aes(x=waiting, y=..density..)) +
  geom_histogram(fill="cornsilk", colour="grey60", alpha=.2) +
  geom_dentisy() +
  xlim(35, 105)
fig-1.3.4.png

1.4 基于分组数据绘制分组密度曲线

使用geom_density()函数,将分组变量映射给colour或fill等图形属性即可
分组变量必须是因子型或字符串向量!

library(MASS)
birthwt1 = birthwt
birthwt1$smoke = factor(birthwt1$smoke)
# 把变量smoke映射给colour
ggplot(birthwt1, aes(x=bwt, colour=smoke)) +
  geom_density()
fig-1.4.1.png

# 把变量smoke映射给fill,设置alpha使填充色半透明
ggplot(birthwt1, aes(x=bwt, fill=smoke)) +
  geom_density(alpha=.3)
fig-1.4.2.png

birthwt包含婴儿出生体重及一系列导致出生体重过低的危险因子的数据

head(birthwt)
# low age lwt race smoke ptl ht ui ftv  bwt
# 85   0  19 182    2     0   0  0  1   0 2523
# 86   0  33 155    3     0   0  0  0   3 2551
# 87   0  20 105    1     1   0  0  0   1 2557
# 88   0  21 108    1     1   0  0  1   2 2594
# 89   0  18 107    1     1   0  0  1   0 2600
# 91   0  21 124    3     0   0  0  0   0 2622

下面观察变量smoke(抽烟与否)与变量bwt(出生体重,单位是克)的关系。

library(plyr)
birthwt1$smoke = revalue(birthwt1$smoke, c("0"="No Smoke", "1"="Smoke"))
png("fig-1.4.3.png", width=500, height=500)
ggplot(birthwt1, aes(x=bwt)) +
  geom_density(fill="white", colour="black") + 
  facet_grid(smoke ~ .)
fig-1.4.3.png

添加了核密度曲线的分面

ggplot(birthwt1, aes(x=bwt, y=..density..)) +
  geom_histogram(fill="cornsilk", colour="grey60", alpha=.2) +
  geom_density() +
  facet_grid(smoke ~ .)
fig-1.4.4.png

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350