{ggdist}:如果需要了解自己数据的分布,一定要画这几个图看看!

学术   2024-06-05 17:22   浙江  
今天介绍一个R包{ggdist},能画出多种图型展示数据分布情况,还能与{ggplot2}兼容

首先,准备需要的R包:

install.packages("ggdist")

library(ggdist)
library(ggplot2) # install.packages("ggplot2")
library(distributional) # install.packages("distributional")
library(patchwork) # install.packages("patchwork")
接下来,创建作图需要的数据们:

set.seed(000)
mydata <- data.frame(
  groups = LETTERS[1:4],
  values = rnorm(1000, mean = c(2, 8, 5, 7), sd = c(1, 1.5, 2, 5)),
  types = c(rep("T1", 4), rep("T2", 4))
)

summary(mydata)

mydata1 <- data.frame(
  groups = LETTERS[1:4],
  mean = c(2, 8, 5, 7),
  sd = c(1, 1.5, 2, 5)
)

mydata1

数据创建好了,开始使用R包{ggdist}作图。

假设需要查看数据中多组间的分布情况,可以画一个slab plot:

ggplot(mydata, aes(x = groups, y = values, fill = groups)) +
  stat_slabinterval(geom = "slab") + # 相当于 stat_slab()
  theme_ggdist()

假设已经知道数据的均数和标准差,画出四种不同分布情况的图:

ggplot(mydata1, aes(y = groups, xdist = dist_normal(mean, sd))) +
  stat_slab(colour = "skyblue") +
  theme_ggdist()

再来,假如想画eye plot 和 half-eye plots来观察数据分布

p1 <- ggplot(mydata, aes(x = groups, y = values, fill = groups)) +
  stat_slabinterval(show.legend = FALSE) + # 相当于 stat_halfeye()
  ggtitle('side = "right"') +
  theme_ggdist()

p2 <- ggplot(mydata, aes(x = groups, y = values, fill = groups)) +
  stat_slabinterval(side = "left",
                    show.legend = FALSE) +
  ggtitle('side = "left"') +
  theme_ggdist()

p3 <- ggplot(mydata, aes(x = groups, y = values, fill = groups)) +
  stat_slabinterval(side = "both") + # 相当于 stat_eye()
  ggtitle('side = "both"') +
  theme_ggdist()

p1+p2+p3

上图中分别画出了右half-eye plot、左half-eye plot,和eye plot。

除了上面的几种图形外,也常常使用直方图来观察数据分布,这个就看各位喜好了。假设想画直方图,还是直接使用stat_slabinterval()

ggplot(mydata, aes(x = groups, y = values, fill = groups)) +
  stat_slabinterval(density = "histogram") # stat_histinterval()

还可以对图片进行小小的修饰:

ggplot(mydata, aes(x = groups, y = values, fill = groups)) +
  stat_histinterval(slab_color = "grey",
                    outline_bars =
TRUE)+ 
  theme_ggdist()

如果数据点不多的情况下,可以画个多组别的dots plot(点图):

ggplot(mydata, aes(x = types, y = values, colour = groups)) +
  stat_dots(position = "dodge")

如果想在点图的基础上,再加interval plot,可以使用stat_dotsinterval()

ggplot(mydata, aes(x = groups, y = values, colour = groups)) +
  stat_dotsinterval(slab_color = "skyblue") +
  theme_ggdist()

好啦,今天的内容就到这里。如果有帮助,记得分享给需要的人


参考文献

[1]. https://mjskay.github.io/ggdist/

公众号的线上课程
1. 《R语言和统计新手课程》
2. 《回归:从入门到进阶》
3. 《线性混合模型和纵向数据分析》
【通过公众号菜单栏--线上课程】

统计咨询
《服务介绍和经典合作案例》

公众号核心成员的成果发表
《SCI医学1区影响因子9分论文》

公众号核心成员担任SCI杂志Associate Editor!
《JAD杂志Associate editor》
《Frontiers in Neuroscience, Frontiers in Neurology and Frontiers in Psychiatry杂志的神经退行性病变板块》

加入我们
成为我们的课程推广大使,赢取高额回报!
【通过公众号菜单栏--联系我们--招推广员】

▌本文由R语言和统计首发
▌课程相关咨询可添加R师妹微信: kefu_rstats
▌编辑:June
▌邮箱:contact@rstats.cn
▌网站:www.rstats.cn
我们致力于让R语言和统计变得简单!




R语言和统计
我们定期更新与R有关的内容,比如R编程基础,作图,实用R包的解读,统计学基础知识,前沿的统计方法,机器学习等等。
 最新文章