用R作图:ggplot2和baseR比较
目录
直方图
作图要求:拟合一个服从Beta(6,3)分布的数据样本,作直方图和概率分布曲线,且和Beta(6,3)的pdf比较。
- 生成数据
样本大小和画density使用的数据点长度不一致,不能直接组成一个dataframe输入ggplot。
1# beta sample
2S <- 500
3smpl <- rbeta(S,6,3)
4# density of beta
5x <- seq(0,1,by=0.01)
6y <- dbeta(x,6,3)
- baseR作图
先使用hist作直方图,再增加lines。
使用breaks指定组数,freq = F指定显示频率而不是频数,main指定图标题。
lines(density(smpl))可直接画出样本的概率分布曲线,density()返回一个list变量。
lines(x,y)指定x和y画线,lty="dashed"指定线型为虚线,和样本的曲线相区别。
1hist(smpl, breaks = 20, freq = F, main ="Monte Carlo Sample Distribution and Beta Density")
2lines(density(smpl))
3lines(x,y,lty="dashed")

- ggplot2作图
ggplot的每个图层都使用一个geom_开头的函数,由于smpl数据需要作2个图层,因此作为dataframe传入ggplot主函数,而在geom_line()单独指定dbeta生成的pdf数据点作为data。
geom_histogram不指定aes()时y轴显示频数,aes(y=..density..)将y轴修改为频率。使用bins指定组数,colour和fill是为了接近baseR指定的条形边框和填充色。
geom_density()直接画出样本的概率分布曲线,和baseR的lines(density(smpl))作用一致。
labs(title ="")指定图标题。
geom_line()指定x和y画线,和baseR的lines(x,y)作用一致。
stat_function()可直接画出指定function的图形,不需要先生成采样点数据。例如dbeta即为beta分布的pdf函数。
1library(ggplot2)
2ggplot(data.frame(smpl),aes(x=smpl))+
3 geom_histogram(mapping = aes(y=..density..),
4 bins=20, colour="black",fill="grey")+
5 geom_density()+
6 #geom_line(data = data.frame(x,y),
7 # mapping = aes(x,y),
8 # linetype="dashed")+
9 stat_function(fun = dbeta, args = list(shape1 = 6, shape2 = 3), linetype="dashed")+
10 labs(title = "Monte Carlo Sample Distribution and Beta Density")
