ggplot2: 数据分布图

本文介绍了如何使用R语言中的ggplot2包来创建数据分布图,包括直方图、密度分布图、箱线图、点阵箱形图、小提琴图以及众图的合成方法,通过这些图形可以更直观地理解数据的分布情况。
摘要由CSDN通过智能技术生成

ggplot2: 数据分布图

用 R 数据包 ggplot 来画数据分布图。

#启用 ggplot 包
library(ggplot2)
library(gridExtra) #用以安排所画之图

# 先模拟一些数据
set.seed(50005)
xvar <- c(rnorm(1500, mean = -1.5), rnorm(1500, mean = 1.5))
yvar <- c(rnorm(1500, mean = 1.5), rnorm(1500, mean = 1.5))
zvar <- as.factor(c(rep(1, 1500), rep(2, 1500)))
xy <- data.frame(xvar, yvar, zvar)

前六行数据

> head(xy)
       xvar       yvar zvar
1 -1.280130 -0.2090427    1
2 -1.796032  2.2485486    1
3 -1.253466  2.5731907    1
4 -3.631125  1.4768379    1
5 -2.680294  2.9795864    1
6 -2.898034  1.8608034    1

直方图

用 ggplot 画直方图相对简单, 这里将 xvar 分布做成直方图, 经修改后分布图已不错。

#counts on y-axis
g1<-ggplot(xy, aes(xvar)) + geom_histogram()                #难看
g2<-ggplot(xy, aes(xvar)) + geom_histogram(binwidth=1)            #修改 binwidth
g3<-ggplot(xy, aes(xvar)) + geom_histogram(fill=NA, color="black") + theme_bw() #nicer looking

#密度 on y-axis
g4<-ggplot(xy, aes(x=xvar)) + geom_histogram(aes(y = ..density..), color="black", fill=NA) + theme_bw()

grid.arrange(g1, g2, g3, g4, nrow=1)

在这里插入图片描述

密度分布图

密度分布图的画法与画直方图相似, 将 geom_histogram() 改成 geom_density()即可.

#基本图
p1<-ggplot(xy, aes(xvar)) + geom_density()

#与直方图叠加, 再加条蓝色密度分布线
p2<-ggplot(xy, aes(x=xvar)) + 
  geom_histogram(aes(y = ..density..), color="black", fill=NA) +
  geom_density(color="blue")

#将 xvar 用 z 数据分组, 用 alpha 来修饰透明度。
p3<-ggplot(xy, aes(xvar, fill = zvar)) + geom_density(alpha = 0.2)

grid.arrange(p1, p2, p3, nrow=1)

在这里插入图片描述

箱形图, 点阵箱形图, 小提琴图

#箱形图
b1<-ggplot(xy, aes(zvar, xvar)) + 
  geom_boxplot(aes(fill = zvar)) +
  theme(legend.position = "none")

#点阵箱形图
b2<-ggplot(xy, aes(zvar, xvar)) + 
  geom_jitter(alpha=I(1/4), aes(color=zvar)) +
  theme(legend.position = "none")

#小提琴图
b3<-ggplot(xy, aes(x = xvar)) +
  stat_density(aes(ymax = ..density..,  ymin = -..density..,
               fill = zvar, color = zvar),
               geom = "ribbon", position = "identity") +
  facet_grid(. ~ zvar) +
  coord_flip() +
  theme(legend.position = "none")

grid.arrange(b1, b2, b3, nrow=1)

在这里插入图片描述

众图合成

最后, 将这些不同的分布图合成后会看到更有意思的结果。
先画散点图, 将xvar and yvar 的分布密度放在 X 和 Y 轴上。 我们将它称为地毯图。

#rug plot
ggplot(xy,aes(xvar,yvar))  + geom_point() + geom_rug(col="darkred",alpha=.1)

在这里插入图片描述

还可以将密度分布图(或直方图,箱形图)放在 X 和 Y 轴的边上 。 可将数据用第三变量 zvar 分组, 并以颜色区分。

#先搭一个空的框架, with nothing to print
empty <- ggplot()+geom_point(aes(1,1), colour="white") +
     theme(                              
       plot.background = element_blank(), 
       panel.grid.major = element_blank(), 
       panel.grid.minor = element_blank(), 
       panel.border = element_blank(), 
       panel.background = element_blank(),
       axis.title.x = element_blank(),
       axis.title.y = element_blank(),
       axis.text.x = element_blank(),
       axis.text.y = element_blank(),
       axis.ticks = element_blank()
     )

#xvar 和 yvar 的散点图
scatter <- ggplot(xy,aes(xvar, yvar)) + 
  geom_point(aes(color=zvar)) + 
  scale_color_manual(values = c("orange", "purple")) + 
  theme(legend.position=c(1,1),legend.justification=c(1,1)) 

#X轴的密度图
plot_top <- ggplot(xy, aes(xvar, fill=zvar)) + 
  geom_density(alpha=.5) + 
  scale_fill_manual(values = c("orange", "purple")) + 
  theme(legend.position = "none")

#Y轴的密度图
plot_right <- ggplot(xy, aes(yvar, fill=zvar)) + 
  geom_density(alpha=.5) + 
  coord_flip() + 
  scale_fill_manual(values = c("orange", "purple")) + 
  theme(legend.position = "none") 
#将所有的图安排到一起, 并设计好合适的高和宽。 三个图按2x2排列, 空框架和散点图宽高为4, 另两图为4:1 和1:4

grid.arrange(plot_top, empty, scatter, plot_right, ncol=2, nrow=2, widths=c(4, 1), heights=c(1, 4))

在这里插入图片描述

以上code来自于网站Slawa Rokicki

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值