参考资料:R语言实战【第2版】
1、直方图
直方图通过在x轴上讲值域分割为一定数量的组,在y轴上显示相应值得频数,展示了连续型变量的分布。可以使用如下函数创建直方图:
hist(x)
其中的x是一个由数据值组成的数值向量。参数freq=FALSE表示根据概率密度而不是频数绘制图形。参数breaks用于控制组的数量。在定义直方图中的单元时,默认将生成等距切分。
# 设置画布参数
par(mfrow=c(2,2))
# 绘制简单直方图
hist(mtcars$mpg)
# 直方图中指定组数和颜色
hist(
mtcars$mpg,
breaks=12,
col="red",
xlab="Miles Per Gallen",
main="Colored histogram with 12 bins"
)
# 添加轴须图
hist(
mtcars$mpg,
freq=FALSE,
breaks=12,
col="red",
xlab="Miles Per Gallen",
main="Histogram, rug plot, density curve"
)
rug(jitter(mtcars$mpg))
lines(density(mtcars$mpg),col="blue",lwd=2)
# 添加正态密度曲线和外框
x<-mtcars$mpg
h<-hist(
x,
breaks=12,
freq=FALSE,
col="red",
xlab="Miles Per Gallen",
main="Histogram with normal curve and box"
)
xfit<-seq(min(x),max(x),length=40)
yfit<-dnorm(xfit,mean=mean(x),sd=sd(x))
lines(xfit,yfit,col="blue",lwd=2)
box()
2、核密度图
和密度估计是用于估计随机变量概率密度函数的一种非参数方法,可以作为一种用来观察连续型变量分布的有效方法。绘制密度图的方法(不叠加到另一幅图上)为:
plot(density(x))
其中的x是一个数值型向量。由于plot()函数会创建一幅新的图形,所以要向一幅已经存在的图形上叠加一条密度曲线,可以使用lines()函数。
par(mfrow=c(2,1))
d<-density(mtcars$mpg)
# 完全使用默认设置
# 创建核密度图
plot(d)
# 给核密度图进行相关设置
d<-density(mtcars$mpg)
# 添加标题
plot(d,
main="Kernel Density of Miles Per Gallen")
# 将曲线改为蓝色,并使用实心红色
# 填充曲线下方的区域
polygon(d,col="red",border="blue")
# 添加棕色的周线图
rug(mtcars$mpg,col="brown")
使用sm包中的sm.density.compare()函数可向图形叠加两组或更多的核密度图。使用格式为:
sm.density.compare(x,factor)
其中的x是一个数值型向量,factor是一个分组变量。
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,xlab="Miles Per Gallon")
# 添加标题
title(main="MPG Distribution by Car Cylinders")
# 通过鼠标单击添加图例
colfill<-c(2:(1+length(levels(cyl.f))))
legend(locator(1),levels(cyl.f),fill=colfill)
detach(mtcars)
其中legend()函数是相同图形上添加一个图例,第一个参数locator(1)表示用鼠标点击想让图例出现的位置来交互地放置这个图例。第二个参数值则是由标签组成的字符向量。第三个参数值使用向量colfill为cyl的每一个水平指定了一种颜色。