【问题标题】:pairs2 equivalent in ggplot2ggplot2中的pairs2等价物
【发布时间】:2014-03-03 23:36:35
【问题描述】:

我正在尝试创建一个散点图矩阵,其中矩阵的 x 和 y 变量不同(与 pairs() 对 x 和 y 轴使用相同的变量相反)。

目前我正在使用 TeachingDemos 库中的 pairs2() 函数,但希望对其外观有更多控制权,并正在考虑使用 ggplot2 复制它。 ggplot2中是否有等效的东西?或者如果我不想使用pairs2() 函数,我应该如何最好地生成类似的散点图矩阵?

不确定我是否需要发布示例代码,无论如何都在这里

library(TeachingDemos)
a <- matrix(runif(1:10), ncol = 2)
b <- matrix(sample(1:10), ncol = 2)
pairs2(a,b)

编辑:

为了澄清,a 和 b 都是 2 个不同变量的矩阵。使用以下示例代码可能会更清楚

library(TeachingDemos)
a <- matrix(runif(1:10), ncol = 2)
b <- matrix(sample(1:10), ncol = 2)
colnames(a) <- c("Ratio of correct answer", "Ratio of time spent")
colnames(b) <- c("Hours spent per study session", "Frequency of study per week")
pairs2(a,b)

感谢 Henrik 的建议。抱歉描述不准确,这里是一个学习新手,欢迎所有建议。

【问题讨论】:

  • @Henrik 我认为这不是一个好的复制品;它适用于pairs(),而不是pairs2()。
  • 感谢您的评论布赖恩。我把我的近距离投票变成了建议。 @Ricky,您可能会发现 this post 很有帮助。
  • 谢谢亨利克。正如布赖恩所说,那篇文章(我已经看过)针对pairs(),而不是pairs2()

标签: r ggplot2 scatter-plot


【解决方案1】:

与 ggplot2 的情况一样,困难的部分是将数据转换为正确的形式。在这种情况下,我们希望将两个 x 变量列合并为一列,将两个 y 变量列合并为一列,并添加指示每个值来自哪个 x 和 y 变量的指示符:

library(reshape2)
library(ggplot2)    
dat <- data.frame(a, b)
    names(dat) <- c("x_1", "x_2", "y_1", "y_2")
    dat.m <- melt(dat, measure.vars = c("x_1", "x_2"), variable.name = "x_var", value.name = "x")
    dat.m <- melt(dat.m, measure.vars = c("y_1", "y_2"), variable.name = "y_var", value.name = "y")

现在数据是 ggplot2 所期望的形式,构建实际图形很容易:

ggplot(dat.m, aes(x=x, y=y)) +
    geom_point()+
    facet_grid(y_var ~ x_var, scales="free")

编辑: 与您的新示例相对应的更新版本是

library(reshape2)
library(ggplot2)    

dat <- data.frame(a, b, check.names = FALSE)

dat.m <- melt(dat,
              measure.vars = colnames(a),
              variable.name = "x_var",
              value.name = "Ratio")

dat.m <- melt(dat.m,
              measure.vars = colnames(b),
              variable.name = "y_var",
              value.name = "Study")

ggplot(dat.m, aes(x=Ratio, y=Study)) +
    geom_point()+
    facet_grid(y_var ~ x_var, scales="free")

【讨论】:

  • 感谢 Ista,但我不想面对。您提供的答案是 4 个变量 x 与 y 的散点图,但分组在 [x_1, y_1] 等方面。我正在寻找的是 4 个散点图,其中变量为 x_1 与 y_1、x_1 与 y_2、x_2 与 y_1、和 x_2 与 y_2。没有变量 x 和 y。如果我为变量命名,可能更容易概念化;想象 x_1 和 x_2 是输入,例如“研究持续时间”和“研究频率”,y_1 和 y_2 是输出,例如“成绩”和“疲劳”。我正在尝试做输入/输出对,但不是输入/输入和输出/输出,pairs() 做
  • @Ricky,我认为您可以考虑将此信息添加到您的问题中 - 它往往会在 cmets 中“消失”,并且在问题中很好地格式化要容易得多。您还可以将dimnames 添加到问题中的示例矩阵中。跟踪变量以及您希望如何将矩阵“映射”到绘图可能会稍微容易一些。干杯。
  • @Ricky -- 嗯?我的回答给出了与pairs2(a, b) 完全相同的输出。您可以根据自己的喜好从 x 和 y 轴上移除标签。
  • @Ricky -- 我已经更新了答案以对应您更新的示例,但基本答案仍然相同。
猜你喜欢
  • 2011-05-30
  • 2019-11-03
  • 1970-01-01
  • 2012-01-08
  • 2020-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多