我目前正在尝试提供我在展示位置实验中收集的一些数据。只是让我们前进的东西。我们收集了来自12个土壤样本的DNA,每个样本有三种不同的处理,正在寻找14个基因。还有一个limed / unlimed变量。 R编码是新的,对我来说绝对不直观。
我的实际目标是用x轴上的14个基因(基因)和Y轴上的DNA浓度(RelConc)呈现这些数据。每个处理的点(可能是连接线)与基因的浓度相匹配,以显示处理之间的差异(处理)。我希望将Limed和Unlimed数据分开并将两个图形放在同一图像上。
这是我想要的快速概念
不幸的是,基本的R教程只让我得到了Gene对抗RelConc和针对RelConc的治疗图。
我得到的例子 - 基因对抗DNA
我的第一个想法是创建一个仅包含一个治疗(例如控制)的数据的新表,并尝试单独绘制。
我用过
tapply(RelConc,Treatment, summary)
工作正常并显示通过处理分离的汇总浓度数据。
但我似乎无法让它只显示控制,我一直在尝试变化
tapply(RelConc,Treatment="Control", summary)
返回
Error in unique.default(x, nmax = nmax) :
unique() applies only to vectors
任何想法都值得赞赏,事实上,如果有一种非常简单的方法可以做我想要的,我会失踪,请告诉我:)
谢谢,
杰森
答案 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")