第六篇:R语言数据可视化之数据分布图(直方图、密度曲线、箱线图、等高线、2D密度图)
数据分布图简介
中医上讲看病四诊法为:望闻问切。而数据分析师分析数据的过程也有点相似,我们需要望:看看数据长什么样;闻:仔细分析数据是否合理;问:针对前两步工作搜集到的问题与业务方交流;切:结合业务方反馈的结果和项目需求进行数据分析。
"望"的方法可以认为就是制作数据可视化图表的过程,而数据分布图无疑是非常能反映数据特征(用户症状)的。R语言提供了多种图表对数据分布进行描述,本文接下来将逐一讲解。
绘制基本直方图
本例选用如下测试集:

直方图的横轴为绑定变量区间分隔的取值范围,纵轴则表示变量在不同变量区间上的频数。绘制时只需将基函数的美学特征集中配置好需要分析的变量,然后创建新的直方图图层即可。R语言示例代码如下:
# 基函数
ggplot(faithful, aes(x = waiting)) +
# 直方图函数:binwidth设置组距
geom_histogram(binwidth = 5, fill = "lightblue", colour = "black")
运行结果:

基于分组的直方图
本例选用如下测试集:

直方图的分组图和本系列前面一些博文中讲的一些分组图不同,它不能进行水平方向的堆积 - 这样看不出频数变化趋势;也不能进行垂直方向的堆积 - 这样同样看不出趋势。这里采用一种新的堆积方法:重叠堆积,R语言实现代码如下:
# 预处理:将smoke变量转换为因子类型
birthwt$smoke = factor(birthwt$smoke) # 基函数:x设置目标变量
ggplot(birthwt, aes(x = bwt, fill = smoke)) +
# 直方图函数:position设置堆积模式为重叠
geom_histogram(position = "identity", alpha = 0.4)
运行结果:

也可以采用分面的方法,R语言实现代码如下:
# 预处理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语言示例代码如下:
# 预处理:将smoke变量转换为因子类型
birthwt$smoke = factor(birthwt$smoke) # 基函数:x设置目标变量,fill设置填充色
ggplot(birthwt, aes(x = bwt, fill = smoke)) +
# 密度曲线函数:alpha设置填充色透明度
geom_density(alpha = 0.3)
运行结果:

绘制基本箱线图
本例选用如下测试集:

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

绘制方法是在基函数中将变量分组绑定到横轴,变量本身绑定到纵轴。此外,为了美观也可以将分组绑定到fill变量并设置调色板。R语言示例代码如下:
# 基函数
ggplot(birthwt, aes(x = factor(race), y = bwt, fill = factor(race))) +
# 箱线图函数
geom_boxplot() +
# 颜色标尺
scale_fill_brewer(palette = "Pastel2")
运行结果:

往箱线图添加槽口和均值
在上一节绘制的基本箱线图之上,还能进一步绘制以展示更多信息。
其中最常见的是为箱子添加槽口,它能更清晰的表示中位数的位置。R语言实现代码如下:
# 基函数
ggplot(birthwt, aes(x = factor(race), y = bwt, fill = factor(race))) +
# 箱线图函数
geom_boxplot(notch = TRUE) +
# 颜色标尺
scale_fill_brewer(palette = "Pastel2")
运行结果:

通过stat_summary()函数,还可以在箱线图中标记均值点。R语言实现代码如下:
# 基函数
ggplot(birthwt, aes(x = factor(race), y = bwt, fill = factor(race))) +
# 箱线图函数
geom_boxplot(notch = TRUE) +
# 颜色标尺
scale_fill_brewer(palette = "Pastel2")
运行结果:

绘制2D等高线
本例选用如下测试集:

绘制2D等高线主要是调用stat_density()函数。这个函数会给出一个基于数据的二维核密度估计,然后我们可基于这个估计值来判断各样本点的"等高"性。接下来首先给出各数据点及等高线的绘制方法,R语言实现代码如下:
# 基函数
ggplot(faithful, aes(x = eruptions, y = waiting)) +
# 散点图函数
geom_point() +
# 密度图函数
stat_density2d()
运行结果:
也可以通过设置密度函数美学特征集中的colour参数来给不同密度的等高线着色,R语言实现代码如下:
# 基函数
ggplot(faithful, aes(x = eruptions, y = waiting)) +
# 密度图函数:colour设置等高线颜色
stat_density2d(aes(colour = ..level..))
运行结果:

绘制2D密度图
本例选用如下测试集:

等高线图也是密度图的一种,因此绘制密度图和等高线图用的是同一个函数:stat_density(),只是它们传入的参数不同。首先绘制经典栅格密度图,R语言实现代码如下:
# 基函数
ggplot(faithful, aes(x = eruptions, y = waiting)) +
# 密度图函数:fill设置填充颜色数据为密度,geom设置绘制栅格图
stat_density2d(aes(fill = ..density..), geom = "raster", contour = FALSE)
运行结果:

也可以将密度变量映射到透明度来渲染,R语言实现代码如下:
ggplot(faithful, aes(x = eruptions, y = waiting)) +
# 散点图函数
geom_point() +
# 密度图函数:alpha设置填充透明度数据为密度,geom设置绘制栅格图
stat_density2d(aes(alpha = ..density..), geom = "raster", contour = FALSE)
运行结果:

第六篇:R语言数据可视化之数据分布图(直方图、密度曲线、箱线图、等高线、2D密度图)的更多相关文章
- 第二篇:R语言数据可视化之数据塑形技术
前言 绘制统计图形时,半数以上的时间会花在调用绘图命令之前的数据塑型操作上.因为在把数据送进绘图函数前,还得将数据框转换为适当格式才行. 本文将给出使用R语言进行数据塑型的一些基本的技巧,更多技术细节 ...
- R语言中的横向数据合并merge及纵向数据合并rbind的使用
R语言中的横向数据合并merge及纵向数据合并rbind的使用 我们经常会遇到两个数据框拥有相同的时间或观测值,但这些列却不尽相同.处理的办法就是使用merge(x, y ,by.x = ,by.y ...
- R语言系列:生成数据
R语言系列:生成数据 (2014-05-04 17:41:57) 转载▼ 标签: r语言 教育 分类: 生物信息 生成规则数据1.使用“:“,如x=1:10,注意该方法既可以递增也可以递减,如y=10 ...
- 用R语言实现对不平衡数据的四种处理方法
https://www.weixin765.com/doc/gmlxlfqf.html 在对不平衡的分类数据集进行建模时,机器学**算法可能并不稳定,其预测结果甚至可能是有偏的,而预测精度此时也变得带 ...
- R语言︱噪声数据处理、数据分组——分箱法(离散化、等级化)
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 分箱法在实际案例操作过程中较为常见,能够将一些 ...
- R语言数据集合并、数据增减、不等长合并
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 数据选取与简单操作: which 返回一个向量 ...
- R语言读取matlab中数据
1. 在matlab中将数据保存到*.mat 文件夹 save("data.mat","data","label")#将data和label ...
- R语言学习笔记(数据预处理)
setwd("d:/r/r-data/")data=read.table("salary.txt",header=T)attach(data)mean(Sala ...
- R语言:导入导出数据
主要学习如何把几种常用的数据格式导入到R中进行处理,并简单介绍如何把R中的数据保存为R数据格式和csv文件. 1.保存和加载R的数据(与R.data的交互:save()函数和load()函数) a & ...
随机推荐
- js 的其它运算符和优先级
三元运算符: 语法为 exp1? exp2:exp3 判断 exp1是true 和 false 如果true,则返回exp2 ,如果false ,则返回exp3 <script> if ...
- JQuery select控件的相关操作
JQuery获取和设置Select选项方法汇总如下: 获取select 先看看下面代码: $("#select_id").change(function(){//code...}) ...
- img超出div width时, jQuery动态改变图片显示大小
参考: 1. http://blog.csdn.net/roman_yu/article/details/6641911 2. http://www.cnblogs.com/zyzlywq/archi ...
- Python爬虫常用模块,BeautifulSoup笔记
import urllib import urllib.request as request import re from bs4 import * #url = 'http://zh.house.q ...
- Flask_SqlAlchemy 1215, 'Cannot add f oreign key constraint'
Flask_SqlAlchemy 1215, 'Cannot add f oreign key constraint'报错 sqlalchemy.exc.IntegrityError: (pymysq ...
- sqlserver cte递归向上统计
数据字典如下
- Node.js REPL终端
REPL表示读取评估和演示打印循环(Read Eval Print Loop),它代表一个命令输入和系统在交互模式的输出响应窗口控制台或Unix/ Linux的shell计算机环境. Node.js附 ...
- [BZOJ 1068] [SCOI2007] 压缩 【记忆化搜索】
题目链接:BZOJ - 1068 题目分析 这种记忆化搜索(区间 DP) 之前就做过类似的,也是字符串压缩问题,不过这道题稍微复杂一些. 需要注意如果某一段是 S1S1 重复,那么可以变成 M + S ...
- [BZOJ 1576] [Usaco2009 Jan] 安全路经Travel 【树链剖分】
题目链接: BZOJ - 1576 题目分析 首先Orz Hzwer的题解. 先使用 dijikstra 求出最短路径树. 那么对于一条不在最短路径树上的边 (u -> v, w) 我们可以先沿 ...
- Gvim一些基本配置
介绍一些关于Gvim(windows 7 32位 Vim 7.4)的基本配置,除了特别说明,代码一律添加在安装目录下的_vimrc文件中. 1.取消自动备份,这行代码需要添加在 _vimrc文件中的b ...