2017-07-04 75 views
0
df1 <- data.frame(a=c(1,4,7), 
       b=c(3, 5, 6), 
       c=c(1, 1, 4), 
       d=c(2 ,6 ,3)) 
df2<-data.frame(id=c("a","f","f","b","b","c","c","c","d","d"), 
      var=c(12,20,15,18,10,30,5,8,5,5)) 

mediorder <- with(df2, reorder(id, -var, median)) 
boxplot(var~mediorder, data = df2) 

fc = levels(as.factor(mediorder)) 
ndf1= df1[,intersect(fc, colnames(df1))] 

ln<-lm(#confused here 

boxplot(ndf1) 
abline(ln) 

我有上面的盒子图(ndf1),x轴根据另一个数据框架,我想添加一个趋势线。如何在订购x轴时将趋势线添加到计数(y轴)和ID(x轴)的盒图中

我很困惑,因为它没有x和y变量来引用,只是有计数的列。此外,排序造成我的问题。

编辑以澄清... 我建立在这里的问题是:How to match an ordered list (e.g., levels(as.factor(x))) to another dataframe in which only some columns match?

所有我想要做的就是适应趋势线ndf1

+0

你的问题是非常混乱。你应该澄清它。例如,因子“a”只有一个值(12),所以“d”。 –

+0

作为唯一的例子它并不重要。 – joey5

+0

嗯,我认为这不是正确的例子,因为你正在制作一个带有一个值的boxplot。 –

回答

0

这样的事情应该做的。使用ggplot2相当简单。但是,您的数据/问题有点令人困惑,例如有些因素(a,d)只有一个数据点。这是你想要的吗?

df2$id <- factor(df2$id , levels = levels(mediorder)) 
library(ggplot2) 
ggplot(data = df2, aes(x = id, y = var)) + geom_boxplot() + 
    geom_smooth(method = "lm", aes(group = 1), se = F) 

enter image description here

+0

趋势线应该适合nfd1 – joey5

+0

@ joey5,你是说你的回归线应该来自一个不同的数据框,其中包含了你在箱形图数据中有什么不同的因素?什么是grp? –

+0

对不起。 grp仅仅是我用来匹配我的数据的示例代码。 – joey5