我有以下代码
frame()
Y = read.table("Yfile.txt",header=T,row.names=NULL,sep='')
X = read.table("Xfile.txt",header=F,sep='')
plot(Y$V1~X$V1,pch=20,xlim=c(0,27))
par(new=T)
plot(Y$V1~X$V2,pch=20,xlim=c(0,27),col='red')
par(new=T)
plot(Y$V1~Y$V3,pch=20,xlim=c(0,27),col='blue')
par(new=T)
一切都很好,我在同一个地块上得到了3张图。但是,当我想划分X $ V1,X $ V2和X $ V3来规范化数据时
plot(Y$V1~X$V1/Y$V2,pch=20,xlim=c(0,27))
par(new=T)
plot(Y$V1~X$V2/Y$V2,pch=20,xlim=c(0,27),col='red')
par(new=T)
plot(Y$V1~Y$V3/Y$V2,pch=20,xlim=c(0,27),col='blue')
par(new=T)
我收到了消息
点击返回查看下一个情节:
并且图表不会显示在同一个图表中。有谁能告诉我发生了什么以及如何解决它?
答案 0 :(得分:6)
如果要在公式中使用算术运算,则必须使用I()
函数。所以
plot(Y$V1~I(X$V1/Y$V2),pch=20,xlim=c(0,27))
par(new=T)
plot(Y$V1~I(X$V2/Y$V2),pch=20,xlim=c(0,27),col='red')
par(new=T)
plot(Y$V1~I(Y$V3/Y$V2),pch=20,xlim=c(0,27),col='blue')
par(new=T)
作品。
关注formula
的帮助页面:
为避免这种混乱,功能
I()
可用于括号 模型公式的一部分 运算符用于算术运算 感。例如,在公式y ~ a + I(b+c)
中,将使用术语b+c
被解释为b
和c
的总和。
编辑。你可以在一个命令中没有公式的情况下完成它:
plot(c(X$V1/Y$V2, X$V2/Y$V2, Y$V3/Y$V2), rep(Y$V1, 3),
pch=20, xlim=c(0,27),
col=rep(c("black", "red", "blue"), each=30)
)
答案 1 :(得分:4)
我不确定为什么会收到错误,但是对于第二个和第三个图表使用points
而不是plot
是一个更优雅的解决方案(并删除那些{{1} }来电)