直方图

直方图通过在x轴上将值域分割为一定数量的组,在Y轴上显示相应的频数,展示了连续型变量的分布。其函数及格式为

hist(x)

参数x为连续型变零,hist()只有x这个连续型变量是必须输入的

参数freq=FALSE表示根据概率密度而不是频数绘制的图形(y轴显示的是概率密度值而不是频数)

参数breaks用于控制组的数量。在定义直方图中的单元时,默认将生成等距的切分

例子1,简单的直方图

hist(mtcars$mpg)

r语言ggplot画频率直方图 r语言频数直方图_r语言ggplot画频率直方图


例子2指定组数及颜色

hist(mtcars$mpg,breaks = 12,col="blue",
     xlab = "Miles Per Gallon",
     main = "Colored histogram with 12 bins")

r语言ggplot画频率直方图 r语言频数直方图_r语言ggplot画频率直方图_02


例子3,制作概率密度图形添加轴须图及概率密度线

轴须图是实际数值的一种一维呈现方式

如果轴须图中有很多结(形同的值)可以使用参数amout把这些结分开

这样将向每个数据点添加一个小的随机值(一个±amout之间的均匀分布的随机数)

轴须图通过rug(jitter())函数进行制作

hist(mtcars$mpg,breaks = 12,col="blue",
     xlab = "Miles Per Gallon",
     main = "Colored histogram with 12 bins",freq = FALSE)
#添加轴须图
rug(jitter(mtcars$mpg))
#density()核密度函数给定一个向量可以生成一个核密度估计
lines(density(mtcars$mpg),col="blue",lwd=2)

r语言ggplot画频率直方图 r语言频数直方图_概率密度_03

例子4,添加正太密度曲线和外框

#4,添加正太密度曲线和外框
h <- hist(mtcars$mpg,breaks = 12,col="blue",
     xlab = "Miles Per Gallon",
     main = "Colored histogram with 12 bins")
x <- mtcars$mpg
xfit <- seq(min(x),max(x),length=40)
xfit
#生成正太密度曲线
yfit <- dnorm(xfit,mean = mean(x),sd = sd(x))
#对概率密度值进行修正让他可以匹配直方图
#hist()中的mids为每个分组的中心点,diff是为了获得相邻两项的差
#这样处理使得正太密度曲线所围成的图形的面积等于直方图的面积,便于正太密度曲线与直方图的比较
yfit <- yfit*diff(h$mids[1:2])*length(x)
lines(xfit,yfit,col="black",lwd=2)
#使用box()函数生成盒型图
box()

r语言ggplot画频率直方图 r语言频数直方图_概率密度_04

例子5,核密度图
核密度估计是用于估计随机变量
核密度图的方法为
plot(density(x))
由于plot()函数会创建一幅新的图形,所以要向一幅已经存在图形的图形上添加一条密度曲线可以使用lines()函数
plotgon()函数根据x和y的坐标绘制多边型,其参数col可以填充整个图形,border参数是用来填充边界的颜色,。而这一点也是plotgon()函数与plot()函数的区别。plot()函数指的是一条线,plotgon()函数指的是线围成的图形。

d <- density(mtcars$mpg)
plot(d)

plot(d,main="Kernel Density of Miles Per Gallon")
#将曲线改成蓝色,并使用实心红色填充曲线下方的区域
#polygon()函数根据x和y坐标绘制多变型
#border表示边界的颜色
polygon(d,col="red",border = "blue")

r语言ggplot画频率直方图 r语言频数直方图_图例_05


例子5,多组核密度图制作

使用sm包中的sm.density.compare()函数可以向图形叠加两组或者更多的密度图,格式为

sm.density.compare(x,factor)

其中x是一个数值型向量,factor是一个分类变量

install.packages("sm")
library(sm)
attach(mtcars)
#创建分组变量
cyl.f <- factor(cyl,levels = c(4,6,8),labels = c("4 cylinder","6 cylinder", "8 cylinder"))
#绘制密度图
sm.density.compare(mpg,cyl.f,xlab="Miles Per Gallon")
title(main="Kernel Density of Miles Per Gallon")
#通过鼠标点击添加图例
#生成一个代表颜色的向量
colfill <- c(2:(1+length(levels(cyl.f))))
#levels(cyl.f)表示图例的标签
legend(locator(1),levels(cyl.f),fill=colfill)

r语言ggplot画频率直方图 r语言频数直方图_r语言ggplot画频率直方图_06


结束总结绘制直方图的函数有hist()函数,参数breaks可以设置对数值变量x分组的格式

freq可以控制是生成概率密度直方图还是生成频数直方图。

轴须图可以用函数rug(jitter())函数生成。

可以在以频数为y轴的直方图上添加经过处理后的概率密度曲线及正太分布曲线以做比较

plot(density(x))可以生成核密度图

polygon可以生成根据x和y坐标绘制的多边形

sm包中的sm.density.compare()函数可以生成多组的核密度图其格式为

sm.density.compare(x,factor)