如何在R中绘制数据框的所有图?

时间:2017-01-09 15:56:14

标签: r plot

我有一个表示基准的数据框,我想生成所有可能的比较图。这是一个代表我的问题的数据框的小例子。

module "QtQuick" version 2.0 is not installed

enter image description here

我想制作以下图表。

  • D的功能,当B和C固定时。这将产生四(4)条不同的线,每对一对(B,C)。

  • 当A和C固定时,B的功能是D.这也会产生六(6)个不同的行。

  • D在C的功能中,当A和B固定时。再次,六(6)个不同的行。

在R中有一个简单的方法吗?

目前,我并不介意他们处于不同的情节中。此时任何表示都可以。我只需要制作所有的情节,因为我不知道我们想要如何显示结果。

修改

我忘了在我的示例中指出数据框的列没有相同的因子级别。这是一个更完整的例子。

 df = data.frame("A"=c(1,2,3,1,2,3,1,2,3,1,2,3), "B"=c(1,1,1,2,2,2,1,1,1,2,2,2), "C"=c(1,1,1,1,1,1,2,2,2,2,2,2), "D"=c(4,5,6,7,8,9,10,11,12,13,14,15))

使用@ mattek的解决方案,我有以下图表。 enter image description here

这很棒。如果我可以从x轴中删除额外的值并且只保留每列的相应因子,那将是完美的。

4 个答案:

答案 0 :(得分:1)

探索性分析的可能答案,它将显示变量之间的相关性以及平滑线:

df = data.frame("A"=c(1,2,3,1,2,3,1,2,3,1,2,3), "B"=c(1,1,1,2,2,2,1,1,1,2,2,2), "C"=c(1,1,1,1,1,1,2,2,2,2,2,2), "D"=c(4,5,6,7,8,9,10,11,12,13,14,15))

panel.cor <- function(x, y, digits = 2, prefix = "", cex.cor, ...)
{
  usr <- par("usr"); on.exit(par(usr))
  par(usr = c(0, 1, 0, 1))
  r <- cor(x, y)
  txt <- format(c(r, 0.123456789), digits = digits)[1]
  txt <- paste0(prefix, txt)
  if(missing(cex.cor)) cex.cor <- 0.8/strwidth(txt)
  text(0.5, 0.5, txt, cex = cex.cor * r)
}

pairs(df, lower.panel = panel.smooth, upper.panel = panel.cor)

enter image description here

答案 1 :(得分:1)

mvn clean test sonar:sonar

首先,我们融化你的桌子:

library(ggplot2)
library(reshape2)

然后,我们添加分组列:

df.plot = melt(df, 
               measure.vars = c('A', 'B', 'C'), 
               id.vars = 'D', 
               variable.name = 'var.name', 
               value.name = 'val.abc')

我们准备好了:

df.plot$grouping = rep(1:4, 3, each = 3)

使用ggplot(df.plot, aes(x = val.abc, y = D, group = as.factor(grouping))) + facet_wrap(~ var.name) + geom_line(aes(colour = var.name)) + geom_point(aes(colour = var.name)) 可以消除每个方面的不存在因素。

enter image description here

答案 2 :(得分:0)

另一个选项来自使用GGaly包的ggplot:

library(ggplot2)
library(GGally)
如果您的某些数据是一个因素,使用您的数据,我们会假设A是一个因子变量

df = data.frame("A"=as.factor(c(1,2,3,1,2,3,1,2,3,1,2,3)), "B"=c(1,1,1,2,2,2,1,1,1,2,2,2), "C"=c(1,1,1,1,1,1,2,2,2,2,2,2), "D"=c(4,5,6,7,8,9,10,11,12,13,14,15))
然后ggpairs会制作箱图而不是积分,你可以选择

enter image description here     ggpairs(DF)

答案 3 :(得分:0)

这是我要做的,我会创建三个新的变量来捕捉A,B和C的不同组合:

library(dplyr)
library(ggplot2)
dat <- data.frame("A"=c(1,2,3,1,2,3,1,2,3,1,2,3), 
                  "B"=c(1,1,1,2,2,2,1,1,1,2,2,2), 
                  "C"=c(1,1,1,1,1,1,2,2,2,2,2,2), 
                  "D"=c(4,5,6,7,8,9,10,11,12,13,14,15))

# add variables for A-B, A-C, B-C
dat <- dat %>%
  mutate('A - B' = paste(A, '-', B),
         'A - C' = paste(A, '-', C),
         'B - C' = paste(B, '-', C))

然后我们制作地块:

ggplot(dat, aes(y = D))+
  geom_line(aes(x = C, colour = `A - B`))

enter image description here

ggplot(dat, aes(y = D))+
  geom_line(aes(x = B, colour = `A - C`))

enter image description here

ggplot(dat, aes(y = D))+
  geom_line(aes(x = A, colour = `B - C`))

enter image description here