小白学数据可视化:单变量连续型可视化——直方图
专题介绍:R是一种广泛用于数据分析和统计计算的强大语言,于上世纪90年代开始发展起来。得益于全世界众多 爱好者的无尽努力,大家继而开发出了一种基于R但优于R基本文本编辑器的R Studio(用户的界面体验更好)。也正是由于全世界越来越多的数据科学社区和用户对R包的慷慨贡献,让R语言在全球范围内越来越流行。其中一些R包,例如MASS,SparkR, ggplot2,使数据操作,可视化和计算功能越来越强大。R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。R作为一种统计分析软件,是集统计分析与图形显示于一体的。它可以运行于UNIX、Windows和Macintosh的操作系统上,而且嵌入了一个非常方便实用的帮助系统,相比于其他统计分析软件,R的学术性开发比较早,适合生物学和医学等学术学科的科研人员使用。
这是我的第5篇数据可视化(data visualization)的文章。
-
第1篇:《小白学数据可视化:前言》
本文介绍对数据集中重要的连续型单一变量做可视化分析。比方说,金融科技里面用户信用评分的分布,世界各国的国民经济总产值分布等。我们可以使用直方图来揭示连续型单一变量的分布关系。
直方图简介
直方图,大家都不陌生。很多领域里面都会谈到,大同小异。数学里面,说到了直方图;数据分析里面,说到了直方图;数字图像处理里面,也说到了直方图。直方图,不仅仅是一种很有效的可视化分析工具,还是一种巧妙地特征工程方法。
如何做直方图呢?
-
第一步:对变量分箱。分箱要么指定箱子的数目(ggplot2的直方图默认值是30),要么指定箱子的宽度。
-
第二步:统计每个箱子所占的频数。
-
第三步: 针对各个箱子和对应的频数结果绘制图形(与Excel的柱状图相类似了)。
ggplot2包画直方图
第一步:加载R包
library(ggplot2)
library(scales)
library(dplyr)
第二步:准备数据集
# 构建业务场景的数据集
set.seed(1234)
data_df <- data.frame(
sex = factor(rep(c('Female', 'Male'), each = 1000)),
weight = round(c(rnorm(1000, mean = 55, sd = 5), rnorm(1000, mean = 65, 5)))
)
第三步:研究变量weight的分布
采用直方图,并且修饰和完善直方图
ggplot(data = data_df, mapping = aes(x = weight)) +
geom_histogram() +
labs(title = '体重分布图',
x = 'weight')

接下来对每个柱子做修饰,利用参数fill填充柱子的颜色,参数color设计柱子边框的颜色。
ggplot(data = data_df, mapping = aes(x = weight)) +
geom_histogram(fill = 'cornflowerblue',
color = 'white') +
labs(title = '体重分布图',
x = 'weight')

通过参数bins或者binwidth控制直方图所要展示的柱子数目。
ggplot(data = data_df, mapping = aes(x = weight)) +
geom_histogram(fill = 'cornflowerblue',
color = 'white',
bins = 20) +
labs(title = '体重分布图',
subtitle = 'bins 的数目是20',
caption = 'source:数据人网(http://shujuren.org)',
x = 'weight')

或者
ggplot(data = data_df, mapping = aes(x = weight)) +
geom_histogram(fill = 'coral',
color = 'white',
binwidth = 5) +
labs(title = '体重分布图',
subtitle = 'binwidth的宽度是5',
caption = 'source:数据人网(http://shujuren.org)',
x = 'weight')

直方图默认情况下是采用计数(count)表示,我们采用百分比来表示。
ggplot(data = data_df, mapping = aes(x = weight, y = ..count.. / sum(..count..))) +
geom_histogram(fill = 'coral',
color = 'white',
binwidth = 5) +
labs(title = '体重分布图',
subtitle = 'bins 的数目是20',
caption = 'source:数据人网(http://shujuren.org)',
x = 'weight',
y = '百分比') +
scale_y_continuous(labels = percent)

ggplot2包利用ggplot()函数绘制的图像,返回值也可以记录为一个对象,类似变量一样,后续在其基础上,可以继续补充和完善。
在图像对象基础上增添平均线。
# 记录为一个图像对象
pic1 <- ggplot(data = data_df, mapping = aes(x = weight, y = ..count.. / sum(..count..))) +
geom_histogram(fill = 'coral',
color = 'white',
binwidth = 5) +
labs(title = '体重分布图',
subtitle = 'bins 的数目是20',
caption = 'source:数据人网(http://shujuren.org)',
x = 'weight',
y = '百分比') +
scale_y_continuous(labels = percent)
# 添加平均线
pic1 + geom_vline(aes(xintercept = mean(weight)),
color = 'blue',
linetype = 'dashed',
size = 2)

在图像对象基础上增添核密度曲线。
pic1 + geom_density(aes(y = ..density..), alpha = .2, color = 'red', size = 2)

使用变量sex控制分组,并且对每个组添加均值线。
mean_df <- data_df %>% group_by(sex) %>% summarise(grp_mean = mean(weight))
ggplot(data = data_df, aes(x = weight, color = sex)) +
geom_histogram(fill = 'white',
binwidth = 5,
position = 'dodge') +
geom_vline(data = mean_df, aes(xintercept = grp_mean, color = sex), linetype = 'dashed', size = 2) +
theme(legend.position = 'top')

更多内容,可以查看geom_histogram()函数帮助文档。可视化分析的时候,要清楚可视化的目的,然后再选择合适的可视化手段,最后再做些锦上添花的事情。
关于本文,您有什么见解,请留言。
请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!