数极客首页

R语言数据可视化06:数据分布图(直方图、密度曲线、箱线图、等高线、2D密度图)

数据分布图简介

中医上讲看病四诊法为:望闻问切。而数据分析师分析数据的过程也有点相似,我们需要望:看看数据长什么样;闻:仔细分析数据是否合理;问:针对前两步工作搜集到的问题与业务方交流;切:结合业务方反馈的结果和项目需求进行数据分析

“望”的方法可以认为就是制作数据可视化图表的过程,而数据分布图无疑是非常能反映数据特征(用户症状)的。R语言提供了多种图表对数据分布进行描述,本文接下来将逐一讲解。

绘制基本直方图

本例选用如下测试集:

R语言数据可视化06:数据分布图(直方图、密度曲线、箱线图、等高线、2D密度图)

直方图的横轴为绑定变量区间分隔的取值范围,纵轴则表示变量在不同变量区间上的频数。绘制时只需将基函数的美学特征集中配置好需要分析的变量,然后创建新的直方图图层即可。R语言示例代码如下:

1 2 3 4 # 基函数 ggplot(faithful, aes(x = waiting)) + # 直方图函数:BIwidth设置组距 geom_histogram(BIwidth = 5, fill = "lightblue", colour = "black")

运行结果:

R语言数据可视化06:数据分布图(直方图、密度曲线、箱线图、等高线、2D密度图)

基于分组的直方图

本例选用如下测试集:

R语言数据可视化06:数据分布图(直方图、密度曲线、箱线图、等高线、2D密度图)

直方图的分组图和本系列前面一些博文中讲的一些分组图不同,它不能进行水平方向的堆积 – 这样看不出频数变化趋势;也不能进行垂直方向的堆积 – 这样同样看不出趋势。这里采用一种新的堆积方法:重叠堆积,R语言实现代码如下:

1 2 3 4 5 6 7 # 预处理:将smoke变量转换为因子类型 BIrthwt$smoke = factor(BIrthwt$smoke) # 基函数:x设置目标变量 ggplot(BIrthwt, aes(x = bwt, fill = smoke)) + # 直方图函数:position设置堆积模式为重叠 geom_histogram(position = "identity", alpha = 0.4)

运行结果:

R语言数据可视化06:数据分布图(直方图、密度曲线、箱线图、等高线、2D密度图)

也可以采用分面的方法,R语言实现代码如下:

1 2 3 4 5 6 7 8 9 10 11 # 预处理1:将smoke变量转换为因子类型 BIrthwt$smoke = factor(BIrthwt$smoke) # 预处理2:改变因子水平名称 BIrthwt$smoke = revalue(BIrthwt$smoke, c("0" = "No Smoke", "1" = "Smoke")) # 基函数 ggplot(BIrthwt, aes(x = bwt)) + # 直方图函数 geom_histogram(fill = "lightblue", colour = "black") + # 分面函数:纵向分面 facet_grid(smoke ~ .)

运行结果:

R语言数据可视化06:数据分布图(直方图、密度曲线、箱线图、等高线、2D密度图)

绘制密度曲线

本例选用如下测试集:

R语言数据可视化06:数据分布图(直方图、密度曲线、箱线图、等高线、2D密度图)

密度曲线表达的意思和直方图很相似,因此密度曲线的绘制方法和直方图也几乎是相同的。区别仅在于密度曲线的横轴要绑定到连续型变量,另外绘制函数的名字不同。R语言示例代码如下:

1 2 3 4 5 6 7 # 预处理:将smoke变量转换为因子类型 BIrthwt$smoke = factor(BIrthwt$smoke) # 基函数:x设置目标变量,fill设置填充色 ggplot(BIrthwt, aes(x = bwt, fill = smoke)) + # 密度曲线函数:alpha设置填充色透明度 geom_density(alpha = 0.3)

运行结果:

R语言数据可视化06:数据分布图(直方图、密度曲线、箱线图、等高线、2D密度图)

绘制基本箱线图

本例选用如下测试集:

R语言数据可视化06:数据分布图(直方图、密度曲线、箱线图、等高线、2D密度图)

箱线图是一种常用数据分布图,下图表示了这种图中各元素的意义:

R语言数据可视化06:数据分布图(直方图、密度曲线、箱线图、等高线、2D密度图)

绘制方法是在基函数中将变量分组绑定到横轴,变量本身绑定到纵轴。此外,为了美观也可以将分组绑定到fill变量并设置调色板。R语言示例代码如下:

1 2 3 4 5 6 # 基函数 ggplot(BIrthwt, aes(x = factor(race), y = bwt, fill = factor(race))) + # 箱线图函数 geom_boxplot() + # 颜色标尺 scale_fill_brewer(palee = "Pastel2")

运行结果:

R语言数据可视化06:数据分布图(直方图、密度曲线、箱线图、等高线、2D密度图)

往箱线图添加槽口和均值

在上一节绘制的基本箱线图之上,还能进一步绘制以展示更多信息。

其中最常见的是为箱子添加槽口,它能更清晰的表示中位数的位置。R语言实现代码如下:

1 2 3 4 5 6 # 基函数 ggplot(BIrthwt, aes(x = factor(race), y = bwt, fill = factor(race))) + # 箱线图函数 geom_boxplot(notch = TRUE) + # 颜色标尺 scale_fill_brewer(palee = "Pastel2")

运行结果:

R语言数据可视化06:数据分布图(直方图、密度曲线、箱线图、等高线、2D密度图)

通过stat_summary()函数,还可以在箱线图中标记均值点。R语言实现代码如下:

1 2 3 4 5 6 # 基函数 ggplot(BIrthwt, aes(x = factor(race), y = bwt, fill = factor(race))) + # 箱线图函数 geom_boxplot(notch = TRUE) + # 颜色标尺 scale_fill_brewer(palee = "Pastel2")

运行结果:

R语言数据可视化06:数据分布图(直方图、密度曲线、箱线图、等高线、2D密度图)

绘制2D等高线

本例选用如下测试集:

R语言数据可视化06:数据分布图(直方图、密度曲线、箱线图、等高线、2D密度图)

绘制2D等高线主要是调用stat_density()函数。这个函数会给出一个基于数据的二维核密度估计,然后我们可基于这个估计值来判断各样本点的”等高”性。接下来首先给出各数据点及等高线的绘制方法,R语言实现代码如下:

1 2 3 4 5 6 # 基函数 ggplot(faithful, aes(x = eruptions, y = waiting)) + # 散点图函数 geom_point() + # 密度图函数 stat_density2d()

运行结果:

R语言数据可视化06:数据分布图(直方图、密度曲线、箱线图、等高线、2D密度图)
1 2 3 4 # 基函数 ggplot(faithful, aes(x = eruptions, y = waiting)) + # 密度图函数:colour设置等高线颜色 stat_density2d(aes(colour = ..level..))

运行结果:

R语言数据可视化06:数据分布图(直方图、密度曲线、箱线图、等高线、2D密度图)

绘制2D密度图

本例选用如下测试集:

R语言数据可视化06:数据分布图(直方图、密度曲线、箱线图、等高线、2D密度图)

等高线图也是密度图的一种,因此绘制密度图和等高线图用的是同一个函数:stat_density(),只是它们传入的参数不同。首先绘制经典栅格密度图,R语言实现代码如下:

1 2 3 4 # 基函数 ggplot(faithful, aes(x = eruptions, y = waiting)) + # 密度图函数:fill设置填充颜色数据为密度,geom设置绘制栅格图 stat_density2d(aes(fill = ..density..), geom = "raster", contour = FALSE)

运行结果:

R语言数据可视化06:数据分布图(直方图、密度曲线、箱线图、等高线、2D密度图)

也可以将密度变量映射到透明度来渲染,R语言实现代码如下:

1 2 3 4 5 ggplot(faithful, aes(x = eruptions, y = waiting)) + # 散点图函数 geom_point() + # 密度图函数:alpha设置填充透明度数据为密度,geom设置绘制栅格图 stat_density2d(aes(alpha = ..density..), geom = "raster", contour = FALSE)

运行结果:

R语言数据可视化06:数据分布图(直方图、密度曲线、箱线图、等高线、2D密度图)

发表评论

评论已关闭。

相关文章