如果我绘制数据并使用线条在图表上叠加相同的数据点,我会得到相同的数据点。让我们说
x<-rnorm(100)
plot(x, type="p")
lines(x, type="p",pch=2)
但是,我已经意识到,在多面板图中进行相同操作时,R图中存在失真。当您再次绘制相同的数据时,似乎R无法回忆y轴上的确切值。下面的简单代码显示了&#34; plot&#34;的输出。和&#34;线&#34;不一样。
set.seed(1000)
Range<-rbind(rep(0,4),c(100,100,1,100));thres<-70
Ylab<-c("MAD","Bias","CP","CIL")
X<-list(EVI=cbind(runif(10,0,100),runif(10,0,100),
runif(10,0,1),runif(10,0,100)),
Qp=cbind(runif(10,0,100),runif(10,0,100),runif(10,0,1),runif(10,0,100)))
Plot<-function(x,Pch=1,thres)
{
par(mfrow=c(1,4),las=2)
for(j in 1:4)
{
plot(x[,j],xaxt = "n",xlab="Estimator",
ylab=Ylab[j],type = "p", pch = Pch, ylim=Range[,j])
par(mfg=c(1,j))
axis(1, at=1:nrow(x), labels=LETTERS[1:nrow(x)])
if(j!=3){
par(mfg=c(1,j))
abline(h=thres,col=2)
}else{
par(mfg=c(1,j))
abline(h=c(0.90,0.95,0.99),lty=c(2,1,2),col=rep(2,3))
}
}
}
Line<-function(x,Pch)
{
for(j in 1:ncol(x)) {
par(mfg=c(1,j))
lines(x[,j], type = "p", pch = Pch,col=2)
}
}
lapply(X,function(dat)Plot(dat,thres=thres))
## First panel
Line(X$EVI,Pch=2)
## Move to second panel
Line(X$Qp,Pch=2)
第3栏中各点定位失真的原因是什么?请注意,我已将@WhiteViking中每个数据的范围包含在&#34; Plot&#34;功能。但是,失真一直在显现。谢谢
答案 0 :(得分:0)
问题在于“情节”和“线条”的排序。
像这样的代码,预先使用所有3个'plot'命令:
set.seed(1)
X <- cbind(rnorm(20), 2 * rnorm(20), 3 * rnorm(20))
par(mfrow = c(1,3))
for (i in 1:3) {
plot(X[,i])
}
for (i in 1:3) {
par(mfg = c(1,i))
lines(X[,i], type = "p", col = 2, pch = 3)
}
产生错误选择:
在上面的例子中,执行的第一个'lines'命令将其缩放基于发生的最后一个'plot'。由于它具有比第一个更大的垂直范围,因此“线”的缩放是不正确的。
结构如此:
set.seed(1)
X <- cbind(rnorm(20), 2 * rnorm(20), 3 * rnorm(20))
par(mfrow = c(1,3))
for (i in 1:3) {
par(mfg = c(1,i))
plot(X[,i])
lines(X[,i], type = "p", col = 2, pch = 3)
}
它给出了'plot'和'lines'的正确对齐方式:
您可能需要重新编写代码,将每个子图的“情节”和“线条”组合在一起。
答案 1 :(得分:0)
当第三列转换为百分比时,ylim变得均匀,因此没有这种失真。然而,绕过它而不是这样的特殊转换
会很好答案 2 :(得分:0)
plot()
根据数据范围通过plot.window
设置坐标系。此信息显然存储在par(usr)
最新图中,这意味着如果您想重新访问较旧的图,则应存储这些usr值并相应地重置它们,
set.seed(123)
d1 <- data.frame(x=1:10, y=rnorm(10))
d2 <- data.frame(x=1:10, y=10*rnorm(10))
par(mfrow=c(1,2),mar=c(2.5,2.5,0,0))
plot(d1, type="p")
usr1 <- par("usr")
plot(d2, type="p")
usr2 <- par("usr")
par(mfg=c(1,1), usr=usr1)
points(d1, col="red", pch=3)
par(mfg=c(1,2), usr=usr2)
points(d2, col="red", pch=3)