玩转数据可视化之R语言ggplot2:(五)分组画图

玩转数据可视化之R语言ggplot2


  • 🌸个人主页:JoJo的数据分析历险记
  • 📝个人介绍:小编大四统计在读,目前保研到统计学top3高校继续攻读统计研究生
  • 💌如果文章对你有帮助,欢迎关注、点赞、收藏、订阅专栏

本系列主要介绍R语言ggplot2的使用
参考资料:
ggplot2: Elegant Graphics for Data Analysis

💘5.玩转数据可视化之R语言ggplot2:组合画图

几何对象可以分为单一几何对象和集体几何对象。单一几何对象指的是对每个研究变量对象只有一个几何图形,集体几何对象相当于一个研究变量对象有多个几何图形。例如一个折线图就是一个几何对象,但是当我们在一个图形中画多条折线图就是集体几何图形,我们使用group美学来实现。group美学默认将离散变量的所有值进行交互绘图,当数据没有离散变量时,我们需要进行离散化。上面的理论部分可能听起来不好理解,下面我们以几个具体的案例来解释一下具体的效果与应用场景

# 导入相关库
library(ggplot2)
library(patchwork)
library(dplyr)
library(nlme)
head(Oxboys)
A nfnGroupedData: 6 × 4
SubjectageheightOccasion
<ord><dbl><dbl><ord>
11-1.0000140.51
21-0.7479143.42
31-0.4630144.83
41-0.1643147.14
51-0.0027147.75
61 0.2466150.26

上述数据记录了26个男孩九个阶段的测试,其中subject和occasion都是定序变量,subject表示每个男孩,occasion表示每次测试height表示身高,age表示中心年龄。

🌲5.1 多个分组,一种美学

在许多情况下,您希望将数据分成多个组,但以相同的方式呈现它们。这种许多不同个体的纵向研究中很常用。
换言之,你希望能够区分各个主题。例如,下图显示了每个男孩的成长轨迹

ggplot(Oxboys, aes(age, height,group=Subject)) + geom_point() + geom_line()

png

如果不正确地指定分组变量,则会出现典型的锯齿状图形:如下

ggplot(Oxboys, aes(age, height)) + 
  geom_point() + 
  geom_line()

png

显然我们不希望得到这样的结果,如果我们的分组不是一个变量,而是多个变量,我们可以使用
aes(group = interaction(school_id, student_id))

🌳5.2 在不同层级上分组

有时,我们希望绘制使用不同层级的聚合图:一个层可能显示个人,而另一个层显示整体摘要。
在上一个例子的基础上,假设我们想要添加一条平滑的线,显示所有男孩的总体趋势。
如果我们在两个层中使用相同的分组,我们将为每个男孩获得一个平滑线:

ggplot(Oxboys, aes(age, height, group = Subject)) + 
  geom_line() + 
  geom_smooth(method = "lm", se = FALSE)
`geom_smooth()` using formula 'y ~ x'

png

这不是我们想要的;这里每个男孩添加了一条平滑的线。
因为分组控制几何图形的显示和统计数据的操作:在这里每个组运行一个统计变换。
因此,不在ggplot()中定义分组,我们只在我们关注的层级进行分组

ggplot(Oxboys, aes(age,height))+
    geom_line(aes(group=Subject))+
    geom_smooth(method = 'lm',size=2,se=FALSE)

`geom_smooth()` using formula 'y ~ x'

png

可以看出所有男生整体的平滑线,随着年龄增加,平均身高增加的趋势如上

🌴5.3 覆盖默认分组

例如在某些情况下,我们已经有了离散变量的图形,但我们还想进行跨组连接图形。这是用于交互图、剖面图和平行坐标图等的策略。例如,假设我们在每次测试绘制了高度的箱线图:

ggplot(Oxboys, aes(Occasion, height)) + 
  geom_boxplot()

png

这个图中有一个离散变量,所以我们得到每个唯一x值的一个箱线图。现在我们要叠加连接每个男孩的线。简单地添加geom_line()是行不通的:这些线是在每个测试中绘制的,而不是在每个个体之间绘制的:

ggplot(Oxboys, aes(Occasion, height)) + 
  geom_boxplot() +
  geom_line(colour = "blue", alpha = 0.5)

png

为了得到我们想要的图形,我们需要叠加分组

ggplot(Oxboys, aes(Occasion, height)) + 
  geom_boxplot() +
  geom_line(aes(group = Subject), colour = "blue", alpha = 0.5)

png

💟文章推荐

如果想了解更多ggplot2数据可视化技巧,欢迎访问下列文章
☀️玩转数据可视化之R语言ggplot2:(一)ggplot2实现箱线图、小提琴图、直方图等图形(快速入门)
🌟玩转数据可视化之R语言ggplot2:(二)ggplot2实现分面绘图(Faceting),包括连续变量的转换(快速入门)
🌝玩转数据可视化之R语言ggplot2:(三)ggplot2实现将多张图放在一起,包括并排和插图绘制(快速入门)
🌜玩转数据可视化之R语言ggplot2:(四)单一基础几何图形绘制

posted @ 2022-08-27 11:08  JOJO数据科学  阅读(1442)  评论(0编辑  收藏  举报