问题排序和显示我的数据 - tapply和图形问题

时间:2016-07-09 14:20:49

标签: r graph

我目前正在尝试提供我在展示位置实验中收集的一些数据。只是让我们前进的东西。我们收集了来自12个土壤样本的DNA,每个样本有三种不同的处理,正在寻找14个基因。还有一个limed / unlimed变量。 R编码是新的,对我来说绝对不直观。

我的实际目标是用x轴上的14个基因(基因)和Y轴上的DNA浓度(RelConc)呈现这些数据。每个处理的点(可能是连接线)与基因的浓度相匹配,以显示处理之间的差异(处理)。我希望将Limed和Unlimed数据分开并将两个图形放在同一图像上。

这是我想要的快速概念

enter image description here

不幸的是,基本的R教程只让我得到了Gene对抗RelConc和针对RelConc的治疗图。

我得到的例子 - 基因对抗DNA

enter image description here

我的第一个想法是创建一个仅包含一个治疗(例如控制)的数据的新表,并尝试单独绘制。

我用过

tapply(RelConc,Treatment, summary)  

工作正常并显示通过处理分离的汇总浓度数据。

但我似乎无法让它只显示控制,我一直在尝试变化

tapply(RelConc,Treatment="Control", summary) 

返回

Error in unique.default(x, nmax = nmax) : 
  unique() applies only to vectors

任何想法都值得赞赏,事实上,如果有一种非常简单的方法可以做我想要的,我会失踪,请告诉我:)

谢谢,

杰森

1 个答案:

答案 0 :(得分:3)

这是一个开始。您可以根据需要调整选项。首先,我不会尝试tapply()之类的任何事情。你需要获得每种特定组合的手段;使用aggregate()。然后,我为你的情节制作一个一次性功能,以节省一些打字和便于编辑。请注意,您需要大量自定义功能才能获得所需内容。

d  <- read.csv(file=file.choose(), header=TRUE)
am <- aggregate(RelConc~Treatment*Gene*Liming, data=d, FUN=mean)

my.plot <- function(lim){
  with(am[which(am$Liming==lim & am$Treatment=="Control"),], 
       plot(x=as.numeric(Gene), y=RelConc, ylim=c(0, 0.1), type="b", pch=1, lty=1, col=1,
            axes=FALSE, main=lim, ylab="Relative Concentration", xlab=""))
  box()
  axis(side=1, at=1:14, labels=FALSE)
  text(x=1:14-.5, y=par("usr")[3]-.006, labels=levels(am$Gene), 
       srt=45, pos=1, xpd=TRUE, cex=.9)
  mtext(side=1, text="Gene", line=3.5)
  axis(side=2, at=seq(0, .1, by=.02), labels=seq(0, .1, by=.02))
  with(am[which(am$Liming==lim & am$Treatment=="Insecticide"),], 
       lines(x=as.numeric(Gene), y=RelConc, lty=2, col=2))
  with(am[which(am$Liming==lim & am$Treatment=="Insecticide"),], 
       points(x=as.numeric(Gene), y=RelConc, pch=2, col=2))
  with(am[which(am$Liming==lim & am$Treatment=="Molluscicide"),], 
       lines(x=as.numeric(Gene), y=RelConc, lty=3, col=4))
  with(am[which(am$Liming==lim & am$Treatment=="Molluscicide"),], 
       points(x=as.numeric(Gene), y=RelConc, pch=3, col=4))
  legend("topleft", legend=c("Control", "Insecticide", "Molluscicide"), 
         pch=1:3, lty=1:3, col=c(1,2,4))
}

windows(height=6, width=12)  # or quartz(), if you're using Mac
  layout(matrix(1:2, nrow=1))  # gives you 2 plots
  my.plot("Limed")
  my.plot("Unlimed")

enter image description here