R数据可视化3: 直方/条形图

您所在的位置:网站首页 vba自动刷新条形图的代码是什么意思 R数据可视化3: 直方/条形图

R数据可视化3: 直方/条形图

2024-07-09 20:14| 来源: 网络整理| 查看: 265

什么是直方/条形图?

直方图(Histograms)和条形图(Barchart)看起来没有什么区别,长得很像,但是这两个并不同一种统计图像。具体地,通常直方图用来描述连续型数据,比如年龄、身高、体重等。而条形图通常用来描述分类型数据,比如性别、国家等。 对于直方图,我们要做的第一步就是把连续性的数据分箱(bin),所谓的分箱实际上就是将数据按照一定的间隔进行分组。比如我们现在手上有100个人的年龄的数据,从20岁到60岁,然后我们以10岁为间隔,分别统计20-30、30-40、40-50、50-60岁这四组的人数,再进行绘图。因此不同组之间通常是连续的,且间隔一致。数据的连续性体现在图像上就是柱子之间并没有间隔。因此,直方图可以粗略地表示出数据分布密度,被用于密度估计。

直方图例子

而条形图如下列例子统计了不同国家的样本数量。可以看到下图的柱子之间有间隔,体现出国家并非一个连续变量而是一个分类变量。

条形图例子 直方图/条形图怎么画?

ggplot2提供了绘制直方图和条形图的功能,分别为geom_bar()和geom_histogram()。具体如下:

geom_histogram(mapping = NULL, data = NULL, stat = "bin", position = "stack", ...) geom_bar(mapping = NULL, data = NULL, stat = "count", position = "stack", ...,)

那么这两个函数是否有区别吗?实际上并没有太大的区别,geom_histogram()等同于geom_bar()+stat_bin()。

进一步那么我们来研究如何绘制直方图/条形图。

1)需要什么格式的数据 本次我们来看一个新的R提供的数据,就是闪闪发光的钻石💎Diamonds。

数据集Diamonds

price:钻石的价格,单位美元 carat:钻石的重量,单位克拉 cut:钻石切割的质量水平,Fair, Good, Very Good, Premium, Ideal color:钻石的颜色,从J(最差)到D(最好) clarity:钻石的净度,I1(最差)SI2, SI1, VS2, VS1, VVS2, VVS1, IF (最好) x:长度,单位mm y:宽度,单位mm z:深度,单位mm 我们探讨两个问题——统计表中所有的钻石(大约 50,000个)的重量分布以及净度。 可以看到重量是一个连续型变量,而净度是一个分类型变量。所以前者我们做直方图,后者我们做条形图。

2)如何使用ggplot2做直方图

首先我们来看看钻石重量的直方图。

#加载包 library(ggplot2) #作图 ggplot(diamonds, aes(carat)) + geom_histogram()

输入上述命令后我们会得到一条提示stat_bin() using “bins = 30”. Pick better value with “binwidth”.什么意思呢?就是把所有的数据按照相同间隔分成了30组,图上有30个柱子。(如图)

从图上我们可以看到大部分的钻石都是1克拉以下,较少的钻石是2克拉以上。 那用geom_bar()会怎么样呢?我们来看一看。

ggplot(diamonds, aes(carat)) + geom_bar()

可以看到如果使用上述命令,每一个重量对应的都有一个柱子,显示了不同重量而非某个范围的重量所对应的钻石数量。刚刚我们说了geom_bar()+stat_bin()才是等同于geom_histogram()。所以我们来看一下如果命令变成下述是怎么样的?

ggplot(diamonds, aes(carat)) + geom_bar(stat='bin')

看,就和刚才一模一样了!

3)如何使用ggplot2做条形图 然后我们来瞧瞧条形图。

#加载包 library(ggplot2) #作图 ggplot(diamonds, aes(clarity)) + geom_bar()

从图中我们可以看到不同等级净度的钻石情况。

4)如何做好看的直方/条形图

利用下述代码我们可以得到不同重量的钻石切割水平的情况。

ggplot(diamonds, aes(carat,fill=cut)) + geom_histogram(bins = 20,color='black')+#分为20个组,添加边框 theme_bw()+ theme( panel.grid = element_blank()#去除背景的分割线 )+ scale_fill_manual(values=brewer.pal(5,'Blues'))

利用下述代码我们可以得到横向的条形图。

ggplot(diamonds, aes(clarity,fill=clarity)) + geom_bar()+ theme_bw()+ theme( panel.grid = element_blank() )+ coord_flip()#转为横向

关于直方/条形图的介绍就到这里啦。大家还可以更进一步的看一看这两个绘图函数的功能,让图像变得更好看。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3