GGally与pairs相关关系图_史上最全(一)

2023-10-26

640?wx_fmt=png

作者:李誉辉  

四川大学在读研究生


简介
对于多个变量之间的相关关系,常常使用相关关系图来可视化,R自带有pairs()函数,
可以画相关关系图,但是比较复杂,我们先介绍基于ggplot2GGally包。
等介绍完,再介绍pairs()函数。


1.ggmatrix()

ggmatrix()可以将多个ggplot2绘图对象,按照矩阵进行排列。


1.1

矩阵第1列


 1library(ggplot2)
2data(tips, package = "reshape")
3
4head(tips)
5
6g1 <- ggplot(tipsaes(x = total_bill, fill = sex)) + 
7  geom_density(show.legend = FALSE)
8
9g2 <- ggplot(tipsaes(x = total_bill, fill = sex)) + 
10  geom_histogram(position = position_stack(), show.legend = FALSE) + 
11  facet_grid(rows = vars(time))# 以time变量行分面
12
13g3 <- ggplot(tipsaes(x = total_bill, y = tip, color = sex)) + 
14  geom_point(show.legend = FALSE)
15


640?wx_fmt=png


1.2

矩阵第2列


 1library(ggplot2)
2
3g4 <- ggplot(tipsaes(x = time, y = total_bill, fill = sex)) + 
4  geom_boxplot(show.legend = FALSE)
5
6g5 <- ggplot(tipsaes(x = time, fill = sex)) + 
7  geom_bar(position = position_stack(), show.legend = FALSE)
8
9g6 <- ggplot(tipsaes(x = tip, fill = sex)) + 
10  geom_histogram(position = position_stack(), show.legend = FALSE) + 
11  coord_flip() + 
12  facet_grid(cols = vars(time))
13


1.3

矩阵第3列


 1library(ggplot2)
2library(dplyr)
3library(tibble) 
4
5# 第一个图
6text_1 <- round(cor(tips$total_billtips$tip), 3)
7tips_female <- as.tibble(tips) %>
% filter(sex == "Female") %>% as.data.frame()
8tips_male <- as.tibble(tips) %>% filter(sex == "Male") %>% as.data.frame()
9text_2 <- round(cor(tips_female$total_billtips_female$tip), 3)
10text_3 <- round(cor(tips_male$total_billtips_male$tip), 3)
11mytext <- c(text_1text_2text_3)
12mytext <- paste0(c("Cor", "Female", "Male"), ":", mytext)
13mytext <- data.frame(text = mytext,
14                     x = 5,
15                     y = c(6, 42),
16                     stringsAsFactors = FALSE)
17
18g7 <- ggplot(data = mytext[-1, ], aes(x = x, y = y, label = text, color = text)) + 
19  geom_text(show.legend = F) + 
20  geom_text(data = mytext[1,], aes(x = x, y = y, label = text), 
21            color = "black"
22
23rm(text_1tips_femaletips_maletext_2text_3mytext)
24
25# 第2个图
26g8 <- ggplot(tipsaes(x = time, y = tip, fill = sex)) + 
27  geom_boxplot(show.legend = FALSE) + 
28  coord_flip()
29
30# 第3个图
31g9 <- ggplot(tipsaes(x = tip, fill = sex)) + 
32  geom_density(show.legend = FALSE)
33


1.4

customLayout合并图形


 1library(customLayout)
2# 创建画布
3mylay <- lay_new(
4  mat = matrix(1:9, ncol = 3))
5
6plot_list <- list(g1, g2, g3, g4, g5, g6, g7, g8, g9) 
7
8lay_grid(plot_list, mylay) # ggplot2绘图列表传参,传递到画布mylay
9
10rm(g1, g2, g3, g4, g5, g6, g7, g8, g9, mylay)


640?wx_fmt=png


1.5

ggmatrix合并图形


 1library(GGally)
2
3gg_m <- ggmatrix(
4  plots = plot_list, # 绘图对象列表
5  nrow = 3, ncol = 3# 行数和列数
6  xAxisLabels = c("Total Bill""Time of Day""Tip"),
7  yAxisLabels = c("Total Bill""Time of Day""Tip"),
8  byrow = FALSE# 按列排
9  title = "ggmatrix合并图形"
10)
11
12# 添加主题
13gg_m + theme_bw() 
14
15# 提取子集,只能提取其中一个
16gg_m[1,2]
17
18rm(plot_list, gg_m)


640?wx_fmt=png


640?wx_fmt=png


2.ggpairs()

GGally通过添加几个函数来扩展ggplot2,以降低geom与转换数据组合的复杂性。
其中一些功能包括配对图矩阵,散点图矩阵,平行坐标图,生存图,以及绘制网络的几个函数。

2.1

语法及关键参数


语法:

 1ggpairs(data, mapping = NULL, columns = 1:ncol(data), title = NULL,
2  upper = list(continuous = "cor", combo = "box_no_facet", discrete =
3  "facetbar", na = "na"), lower = list(continuous = "points", combo =
4  "facethist", discrete = "facetbar", na = "na"), diag = list(continuous =
5  "densityDiag", discrete = "barDiag", na = "naDiag"), params = NULL, ...,
6  xlab = NULL, ylab = NULL, axisLabels = c("show""internal""none"),
7  columnLabels = colnames(data[columns]), labeller = "label_value",
8  switch = NULL, showStrips = NULL, legend = NULL,
9  cardinality_threshold = 15, progress = NULL,
10  legends = stop("deprecated"))


关键参数:

  • mapping, 表示要叠加到x,y上的aes()映射变量,这里是全局映射。

  • column, 表示选择要绘图的列,可以用变量索引值指定,也可以用变量名指定。

  • columnLabels, 指定矩阵列名称。

  • titlexlabylab, 表示指定标题和坐标轴名称。

  • lower,upper,表示指定下三角和上三角的plot类型,列表传参。

  • diag,表示指定对角线的plot类型,列表传参。

  • axisLabels, 指定变量名称的显示位置,默认显示在外侧,
    "internal"则显示在内测,"none"则不显示。

  • labeller, 表示指定分面标签,

  • switch, 表示指定分面标签位置,与ggplot2:facet_grid中一致,默认在顶部和右侧,
    switch = "x",则显示在底部和右侧,若switch = "y"则显示在顶部和左侧,
    swith = "both"则显示在底部和左侧。

  • showStrips, 布尔运算决定是否显示plots的条带,默认NULL只显示顶部和右侧的条带。
    TRUE则显示所有的条带,FALSE则不显示所有的条带。

  • legend, 默认NULL不显示,可以通过theme(legend.position = "bottom")调整图例的位置。
    有3种指定图例类型的方式:

    • 长度为2的数字向量,表示给矩阵所在的行和列增加图例。c(2,3)表示第2行第3列增加图例。

    • 长度为1的数字向量,表示根据矩阵的顺序,给相应的panel添加图例,
      legend=3表示给1行第3列增加图例。

    • 预先使用grab_legend()提取ggplot2对象的图例,然后指定给legend

  • cardinality_threshold, 表示允许因子变量的最大因子水平数量,默认最多15个因子水平。NULL则因子变量不会绘图。

  • progress, 表示是否显示进度条,默认NULL当超过15个plots时显示进度条,
    对绘图结果没有任何影响,不需要关注。
    TRUE则显示进度条,FALSE则不显示进度条,
    也可用ggmatrix_progress()生成进度条,然后指定。


plot类型:
通过5个参数控制plot类型:continuous,combo,discretnamapping

  • continuous, 表示如果变量x,y都是连续的,应该是什么plot。

    • 对于lowerupper参数:
      可以是

      "point""smooth","smooth_loess""density""cor""blank"

    • 对于diag参数: 可以是

      "densityDiag""barDiag""blankDiag"

  • combo, 表示如果变量一个连续,一个离散,应该是什么plot。
    只能用于lower和upper不能用于diag
    离散变量只能计数,不能映射坐标,所以可能存在坐标翻转

    • 可以是

      "box""box_no_facet""dot"

      "dot_no_facet",
      "facethist""facetdensity"

      "denstrip""blank"

  • discrete, 表示2个变量都是离散的,应该是什么plot。

    • 对于upperlower参数:
      可以是

      "facetbar""ratio""blank"

    • 对于diag参数: 可以是"barDiag""blankDiag"

  • na, 表示指定变量为na的情况,

    • 对于lowerupper,可以是:"na""blank"

    • 对于diag,可以是

      "naDiag""blankDiag"

  • mapping, 表示aes()映射。若指定mapping参数,则叠加到x,y上去。

  • 默认

    lower = list(continuous = "point", combo = "facetthist", discrete = "facetbar")

  • 默认

    upper = list(continuous = "cor", combo = "box_no_facet", discrete = "box")

  • 默认

    diag = list(continuous = "density", discrete = "barDiag")


2.2

column及columnLabels


 1library(GGally)
2library(ggplot2)
3
4ggpairs(tips, mapping = aes(color = sex), 
5  columns = c("total_bill""time""tip"), 
6  columnLabels = c("Total_Bill(连续变量)""Time(离散变量)""Tip(连续变量)"),
7  title = "变量名指定column")
8
9ggpairs(tips, mapping = aes(color = sex), 
10  columns = c(162), 
11  columnLabels = c("Total_Bill(连续变量)""Time(离散变量)""Tip(连续变量)"),
12  title = "索引值指定column")


640?wx_fmt=png


640?wx_fmt=png


2.3

lower,upper, diag


2.3.1 自定义lower

一个离散变量,lowerdiscrete参数无效。

 1ggpairs(tips, mapping = aes(color = day), 
2  columns = c("total_bill""time""tip"), 
3  columnLabels = c("Total_Bill(连续变量)""Time(离散变量)""Tip(连续变量)"),
4  lower = list(
5    continuous = "cor",
6    combo = "dot_no_facet" # 没有2个离散变量,不需要discrete参数
7  ),
8  upper = list(
9    continuous = "blank",
10    combo = "blank"
11  ),
12  diag = list(
13    continuous = "blankDiag",
14    discrete = "blankDiag"
15  ),
16  title = "自定义lower\n(lower$continuous = \"cor\", lower$combo = \"dot_no_facet\")"
17)


640?wx_fmt=png


两个离散变量,lowercontinuous参数无效。


 1ggpairs(tips, mapping = aes(color = day), 
2  columns = c("total_bill""time""sex"), 
3  columnLabels = c("Total_Bill(连续变量)""Time(离散变量)""Sex(离散变量)"),
4  lower = list(
5    combo = "dot_no_facet"
6    discrete = "blank"
7  ),
8  upper = list(
9    combo = "blank",
10    discrete = "blank"
11  ),
12  diag = list(
13    continuous = "blankDiag",
14    discrete = "blankDiag"
15  ),
16  title = "自定义lower\n(lower$combo = \"dot_no_facet\",lower$discrete = \"blank\" )"
17)


640?wx_fmt=png


2.3.2 自定义upper

一个离散变量,upperdiscrete参数无效。

 1ggpairs(tips, mapping = aes(color = day), 
2  columns = c("total_bill""time""tip"), 
3  columnLabels = c("Total_Bill(连续变量)""Time(离散变量)""Tip(连续变量)"),
4  upper = list(
5    continuous = "density",
6    combo = "dot_no_facet" # 没有2个离散变量,不需要discrete参数
7  ),
8  lower = list(
9    continuous = "blank",
10    combo = "blank"
11  ),
12  diag = list(
13    continuous = "blankDiag",
14    discrete = "blankDiag"
15  ),
16  title = "自定义upper\n(upper$continuous = \"density\", upper$combo = \"dot_no_facet\")"
17)


640?wx_fmt=png

两个离散变量,uppercontinuous参数无效。


 1ggpairs(tips, mapping = aes(color = day), 
2  columns = c("total_bill""time""sex"), 
3  columnLabels = c("Total_Bill(连续变量)""Time(离散变量)""Sex(离散变量)"),
4  upper = list(
5    combo = "dot_no_facet"
6    discrete = "ratio"
7  ),
8  lower = list(
9    combo = "blank",
10    discrete = "blank"
11  ),
12  diag = list(
13    continuous = "blankDiag",
14    discrete = "blankDiag"
15  ),
16  title = "自定义upper\n(lower$combo = \"dot_no_facet\",upper$discrete = \"ratio\" )"
17)


640?wx_fmt=png

2.3.3 自定义diag

diag没有combo参数。

 1ggpairs(tips, mapping = aes(color = day), 
2  columns = c("total_bill""time""tip"), 
3  columnLabels = c("Total_Bill(连续变量)""Time(离散变量)""Tip(连续变量)"),
4  diag  = list(
5    continuous = "barDiag",
6    discrete = "blankDiag" #
7  ),
8  lower = list(
9    continuous = "blank",
10    combo = "blank"
11  ),
12  upper = list(
13    continuous = "blank",
14    combo = "blank"
15  ),
16  title = "自定义diag\n(diag$continuous = \"barDiag\", diag$discrete = \"blankDiag\")"
17)


640?wx_fmt=png

 1ggpairs(tips, mapping = aes(color = day), 
2  columns = c("total_bill""time""sex"), 
3  columnLabels = c("Total_Bill(连续变量)""Time(离散变量)""Sex(离散变量)"),
4  diag = list(
5    continuous = "barDiag"
6    discrete = "barDiag"
7  ),
8  lower = list(
9    discrete = "blank",
10    combo = "blank"
11  ),
12  upper = list(
13    discrete = "blank",
14    combo = "blank"
15  ),
16  title = "自定义diag\n(lower$continuous = \"barDiag\",diag$barDiag = \"barDiag\" )"
17)


640?wx_fmt=png

2.3.4 mapping参数

1library(ggplot2)
2library(GGally)
3data(tips, package = "reshape")
4
5ggpairs(tips, 
6        columns = c("total_bill""time""tip"),
7        columnLabels = c("Total_Bill(连续变量)""Time(离散变量)""Tip(连续变量)"),
8        title = "无mapping"
9)


640?wx_fmt=png

1ggpairs(tips, 
2        columns = c("total_bill""time""tip"),
3        columnLabels = c("Total_Bill(连续变量)""Time(离散变量)""Tip(连续变量)"),
4        lower = list(mapping = aes(color = time)),
5        title = "自定义lower(lower$mapping = \"time\")" # 局部映射
6)


640?wx_fmt=png


 1ggpairs(tips, 
2        columns = c("total_bill""tip""size"),
3        columnLabels = c("Total_Bill(连续变量)""Tip(连续变量)""Size(连续变量)"),
4        lower = list(
5          continuous = "cor"
6          mapping = aes(color = sex)
7          ),
8        upper = list(
9          continuous = "cor",
10          mapping = aes(color = smoker)
11        ),
12        diag = list(
13          continuous = "barDiag",
14          mapping = aes(color = time)
15        ),
16        title = "自定义lower,upper,diag\n(下三角颜色为sex,上三角颜色为smoker,对角颜色为time)" 
17)


640?wx_fmt=png


2.3.5 同时指定lower,upper,diag

2个连续变量,1个离散变量。

 1ggpairs(tips, mapping = aes(color = day), 
2        columns = c("total_bill""tip""time"),
3        columnLabels = c("Total_Bill(连续变量)""Tip(连续变量)""Time(离散变量)"),
4        lower = list(
5          continuous = "cor",
6          combo = "dot_no_facet" # 没有2个离散变量,不需要discrete参数
7        ),
8        upper = list(
9          continuous = "density",
10          combo = "dot_no_facet" # 没有2个离散变量,不需要discrete参数
11        ),
12        diag  = list(
13          continuous = "barDiag",
14          discrete = "blankDiag" #
15        ),
16        title = "自定义lower,upper,diag(两个连续变量,一个离散变量)" 
17)


640?wx_fmt=png

1个连续变量,2个离散变量。

 1ggpairs(tips, mapping = aes(color = day), 
2        columns = c("total_bill""time""sex"), 
3        columnLabels = c("Total_Bill(连续变量)""Time(离散变量)""Sex(离散变量)"),
4        lower = list(
5          combo = "dot_no_facet"
6          discrete = "blank"
7        ),
8        upper = list(
9          combo = "dot_no_facet"
10          discrete = "ratio"
11        ),
12        diag = list(
13          continuous = "barDiag"
14          discrete = "barDiag"
15        ),
16        title = "自定义lower,upper,diag(一个连续变量,两个离散变量)" 
17)


640?wx_fmt=png


——————————————

往期精彩:

640?wx_fmt=png

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GGally与pairs相关关系图_史上最全(一) 的相关文章

  • Java基础11--时间日期

    Java基础11 时间日期 文章目录 Java基础11 时间日期 获取当前日期时间 日期比较 使用 SimpleDateFormat 格式化日期 日期和时间的格式化编码 解析字符串为时间 Java 休眠 sleep Calendar类 Ca
  • I/O多路复用(select、poll、epoll)

    基本思想 1 先构造一张有关文件描述符的表 然后使用我们的select poll epoll函数 2 我们的应用程序会将这张表复制给内核 3 内核层初始化表中的需要检测的描述符 4 当检测到有文件操作时 则立即将文件描述符作为标志并返回给应
  • Pytorch profiler with tensorboard.

    文章目录 前言 你将学到什么 一 准备数据集和模型 二 使用profiler来记录执行的事件 三 执行profiler 四 使用TensorBoard来观察结果并对模型性能做出分析 最后 总结 前言 你将学到什么 注意 以下所有的内容均来自
  • innerHTML的作用及用法。

    对innerHTML的用法有些模糊 今天来总结一下 1 innerHTML有两个作用 1 获取对象的内容 2 向对象插入内容 例 这是内容 由于id是唯一的 我们可以不获取id 通过 a innerHTML 来获取id为a的对象的内嵌内容
  • 数据结构学习笔记----排序

    排序 就是要整理表中的元素 使之按关键字递增 或递减 有序排列 如果待排序的表中 存在有多个关键字相同的元素 经过排序后这些具有相同关键字的元素之间的相对 次序保持不变 则称这种 排序算法是稳定的 在排序过程中 若整个表都是放在内存中处理
  • Java8 Stream 之groupingBy 分组讲解

    本文主要讲解 Java 8 Stream之Collectors groupingBy 分组示例 Collectors groupingBy 分组之常见用法 功能代码 使用java8 stream groupingBy操作 按城市分组list
  • day5 qt

    include widget h include ui widget h Widget Widget QWidget parent QWidget parent ui new Ui Widget ui gt setupUi this tim
  • 计算机无法识别荣耀9,华为荣耀9连接不上电脑端华为手机助手怎么处理?

    如果手机无法连接华为手机助手 可通过以下步骤来尝试解决 步骤一 请确认USB线连接是否正常 若手机通知栏中没有显示USB已连接的提示 则可能是USB线连接不正常 手机能充电不能说明USB线是完全连接正常 比如部分USB线仅支持充电不支持数据
  • 独家

    随机森林 概述 当变量的数量非常庞大时 你将采取什么方法来处理数据 通常情况下 当问题非常庞杂时 我们需要一群专家而不是一个专家来解决问题 例如Linux 它是一个非常复杂的系统 因此需要成百上千的专家来搭建 以此类推 我们能否将许多专家的
  • 将线程pid转成16进制_如何使用jstack分析线程状态

    背景 记得前段时间 同事说他们测试环境的服务器cpu使用率一直处于100 本地又没有什么接口调用 为什么会这样 cpu使用率居高不下 自然是有某些线程一直占用着cpu资源 那又如何查看占用cpu较高的线程 当然一个正常的程序员不会写出上述代
  • Spring Cloud中的Ribbon的实现和使用

    Spring Cloud Ribbon 是 Spring Cloud 生态系统中的一个负载均衡客户端 它可以轻松地与其他 Spring Cloud 组件集成 提供负载均衡的方式来访问后端服务 下面介绍 Spring Cloud Ribbon
  • 如何进行远程调试(remote debug)。

    场景 scenario 本地机器 A 重现不了问题 其他机器或其他系统 B 可以重现问题 而重现问题的机器没有装VS调试工具 在开发本地机器中拷贝远程调试工具 以VS 2015 为例 将C Program Files x86 Microso
  • yum错误:Invalid configuration value: failovermethod=priority in /etc/yum.repos.d/CentOS-Epel.repo;

    错误描述 yum install y yum utils device mapper persistent data lvm2 Invalid configuration value failovermethod priority in e
  • 解析优化机器人课程体系与教学策略

    依据 基础教育信息技术课程标准 制定机器人教育课程标准 将机器人教育课程纳入新的课程体系 对现有机器人教育教材进行重新规划和修订 提高机器人教育在中小学阶段课时的比例 同时保证实践课的课时比例 加强学生的动手能力 保证教学质量 除此 还要保
  • 请尽快报名参加Imagine Cup 微软“创新杯”全球学生大赛

    微软Imagine Cup 2013大赛报名即将截止 截止报名时间是2013年1月31日 请各大高校抓紧时间报名参加 CSDN高校俱乐部校区将选出1个校区一等奖 10个校区二等奖 校区一等奖可直接参加中国区半决赛 团队成员还可获得CSDN高
  • VS构建项目报错信息及解决办法04

    报错信息及解决7 报错信息详情 error LNK2001 无法解析的外部符号 symbol 原因 编译后的代码引用或调用符号 该符号未在链接器搜索的任何库或对象文件中定义 什么是未解析的外部符号 符号 是函数或全局变量的内部名称 它是在已
  • 【算法】最优服务次序问题(贪心算法)

    设有n 个顾客同时等待一项服务 顾客i需要的服务时间为 t i 1 lt i lt n 应如何安排n个顾客的服务次序才能使平均等待时间达到最小 平均等待时间是n 个顾客等待服务时间的总和除以n 输入格式 第一行是正整数n 1
  • 归档的概念和用法

    归档的概念和用法 概念 对象归档是指将对象写入文件保存在硬盘的文件内 当在次打开程序时 可以还原这些对象 也可以称为对象序列化 对象持外化 数据持久化的方式 1 gt NSKeyedArchiver 对象归档 2 gt NSUserDefa
  • 回味2022

    回味2022 1 前言 2 过去的十二个月 3 我期望的2023 1 前言 2021年写给自己的总结 回味2021 一年又一年飞逝的光阴 我想唯有时间留给人的印象最为深刻吧 春去秋来 四季轮回间都是时光的印记 2022年12月30日 25岁
  • pycocotools报错 if type(resFile) == str or type(resFile) == unicode: NameError: name ‘unicode‘ is

    Q pycocotools报错 if type resFile str or type resFile unicode NameError name unicode is not defined A pycocotools与python版本

随机推荐