R绘图笔记 | 直方图和核密度估计图的绘制
前面,介绍过散点图绘制,也介绍了柱状图的绘制。本文介绍直方图和核密度估计图的绘制。
1.直方图
直方图是数值数据分布的精确图形表示。这是一个连续变量(定量变量)的概率分布的估计,并且被卡尔·皮尔逊(Karl Pearson)首先引入。它是一种条形图。为了构建直方图,第一步是将值的范围分段,即将整个值的范围分成一系列间隔,然后计算每个间隔中有多少值。这些值通常被指定为连续的,不重叠的变量间隔。间隔必须相邻,并且通常是(但不是必须的)相等的大小。
我们先读入数据
library(ggplot2)
df<-read.csv("Hist_Density_Data.csv",stringsAsFactors=FALSE)
这里的df是用来绘图的数据。部分信息如下,自己绘图知道什么格式就行。
> head(df)
MXSPD Location
1 15.0 Adelaide
2 18.1 Adelaide
3 16.9 Adelaide
4 18.1 Adelaide
5 16.9 Adelaide
6 15.9 Adelaide
> dim(df)
[1] 12041 2
如果是单组数据的话,最简单的方法是利用hist函数。
hist(df$MXSPD,
breaks=15, #分组个数
col="blue", #红色
xlab="MXSPD", # x轴标签
main="Colored histogram with 15 bins")# 标题
其实,就是对一组数据进行频率统计,而有时候我们想在一个图中绘制多组数据的话,利用ggplot2系统绘图会更方便一些。在ggplot2系统中,直方图用geom_histogram函数。
geom_histogram(mapping = NULL, data = NULL, stat = "bin",
position = "stack", ..., binwidth = NULL, bins = NULL,
na.rm = FALSE, show.legend = NA, inherit.aes = TRUE)
mapping由aes()或aes_()创建的映射集。如果指定并继承,其实也就是ggplot(..., aes(x=MXSPD, fill=Location))中的aes,所以aes = TRUE(默认值),它与图的顶层的默认映射结合在一起。data就是用于绘图的数据,通常是继承自调用ggplot()中指定的绘图数据,所以不需要指定。binwidth指定柱子的宽度,alpha指定透明度,值为0到1之间。colour指定柱子边框颜色。
ggplot(df, aes(x=MXSPD, fill=Location))+
geom_histogram(binwidth = 1,alpha=0.5,colour="black",size=0.25)+#, aes(fill = ..count..) )
theme(
text=element_text(size=15,color="black"),
plot.title=element_text(size=15,family="myfont",face="bold.italic",hjust=.5,color="black"),#,
legend.position=c(0.8,0.8),
legend.background = element_blank()
)
上面参数,修改一下看看就知道怎么回事啦。
ggplot(df, aes(x=MXSPD, fill=Location))+
geom_histogram(binwidth = 2,alpha=1,colour="blue",size=0.25)+#, aes(fill = ..count..) )
theme(
text=element_text(size=15,color="black"),
plot.title=element_text(size=15,family="myfont",face="bold.italic",hjust=.5,color="black"),#,
legend.position=c(0.8,0.8),
legend.background = element_blank()
)
2.核密度估计图
核密度估计(kernel density estimation)是在概率论中用来估计未知的密度函数,属于非参数检验方法之一,由Rosenblatt (1955)和Emanuel Parzen(1962)提出,又名Parzen窗(Parzen window)。Ruppert和Cline基于数据集密度函数聚类算法提出修订的核密度估计方法。
在ggplot2系统中,核密度估计图用geom_density函数。
geom_density(mapping = NULL, data = NULL, stat = "density",
position = "identity", ..., na.rm = FALSE, show.legend = NA,
inherit.aes = TRUE)
下面是绘图。
ggplot(df, aes(x=MXSPD, fill=Location))+
geom_density(alpha=0.55,bw=1,colour="black",size=0.25)+
theme(
text=element_text(size=15,color="black"),
plot.title=element_text(size=15,family="myfont",face="bold.italic",hjust=.5,color="black"),#,
legend.position=c(0.8,0.8),
legend.background = element_blank()
)
参考资料:
1.R语言数据可视化之美,张杰/著
2.百度百科词条:直方图、核密度估计图