我有一些问题,将我的"visreg“图中的回归线限制在每个地块的数据范围内。它们目前在总体数据框架的范围内绘制,当我更改单个限制时,它仍然在视觉上绘制到整个数据框架,而不是正确的数据点。我的示例代码如下:
CODrysub
Humid Wet.sub.himid Dry.sub.himid Semi.arid Arid Hyper.arid
Nov 2004 2.20 2.22 2.16 2.03 1.79 1.68
Dec 2004 2.75 2.72 2.52 2.32 2.08 1.93
Jan 2005 2.98 2.92 2.68 2.43 2.18 2.03
Feb 2005 2.81 2.80 2.62 2.37 2.14 2.04
Mar 2005 2.43 2.44 2.33 2.16 1.99 1.96
Apr 2005 2.30 2.25 2.08 2.00 1.90 1.91
SMDrysub
Humid Wet.sub.himid Dry.sub.himid Semi.arid Arid Hyper.arid
Nov 2004 0.26 0.21 0.15 0.08 0.05 0.07
Dec 2004 0.22 0.16 0.10 0.07 0.06 0.08
Jan 2005 0.19 0.12 0.08 0.07 0.07 0.09
Feb 2005 0.18 0.11 0.08 0.07 0.08 0.10
Mar 2005 0.18 0.13 0.09 0.07 0.07 0.10
Apr 2005 0.19 0.15 0.10 0.07 0.06 0.08
library(visreg)
Humida<-cbind(CODrysub[,1],SMDrysub[,1])
Humid2a<-as.data.frame(Humida)
colnames(Humid2a)<-c("CO","SM")
fit1a<-lm(CO~SM,data=Humid2a)
WSHa<-cbind(CODrysub[,2],SMDrysub[,2])
WSH2a<-as.data.frame(WSHa)
colnames(WSH2a)<-c("CO","SM")
fit2a<-lm(CO~SM,data=WSH2a)
##To plot
## Overall plot of an empty frame with dataframe labels
plot(0,xlim=c(0.05,0.31),ylim=c(1.5,3.4),cex.main=1, main= "(a) Scatterplots without soil moisture (Dry season)",xlab=NA,ylab=NA)
par(new=T)
visreg(fit1a,xlab="SM",ylab="CO",points=list(cex=1.2, pch=20,col="deepskyblue4") ,alpha=0.8,line=list(col="deepskyblue4",lwd=2),fill=list(col=adjustcolor("deepskyblue4", alpha.f = 0.09)), xlim=c(0.05,0.31),ylim=c(1.5,3.4),xaxt="n",yaxt="n")
par(new=T)
visreg(fit2a,xlab=NA,ylab=NA,points=list(cex=1.2, pch=20,col="dodgerblue1") ,line=list(col="dodgerblue1",lwd=2),fill=list(col=adjustcolor("dodgerblue1", alpha.f = 0.09)) ,xlim=c(0.05,0.31),ylim=c(1.5,3.4),alpha=0.8,xaxt="n",yaxt="n")当我用这种方式绘制它时,回归线就会无限大,特别是在我的图的左角的数据。我也尝试过定义单个数据限制,但它将我的观点描绘到数据框架的范围内,这是错误的。请问如何将回归线限制在数据范围内?
发布于 2016-03-09 09:53:09
如果您想要扩展地块的x(或y)范围,但不想扩展适合的线条,那么首先应该使用myPlotData <- visreg(myRegression, plot = FALSE)创建绘图数据。然后,您可以使用plot.visreg()绘制绘图,包括自定义x范围:plot.visreg(myPlotData, xlim = 0.05, 0.31)。
以你为例:
xlim <- c(0.05,0.31)
ylim <- c(1.5,3.4)
plot(0,xlim=xlim, ylim=ylim, cex.main=1,
main="(a) Scatterplots without soil moisture (Dry season)",
xlab=NA, ylab=NA)
par(new=T)
visreg1a <- visreg(fit1a, plot = FALSE)
plot.visreg(visreg1a,
xlab="SM", ylab="CO", points=list(cex=1.2, pch=20,col="deepskyblue4"),
alpha=0.8, line=list(col="deepskyblue4", lwd=2),
fill=list(col=adjustcolor("deepskyblue4", alpha.f = 0.09)),
xlim=xlim, ylim=ylim, xaxt="n", yaxt="n")
par(new=T)
visreg2a <- visreg(fit2a, plot = FALSE)
plot.visreg(visreg2a,
xlab=NA, ylab=NA, points=list(cex=1.2, pch=20,col="dodgerblue1"),
line=list(col="dodgerblue1",lwd=2),
fill=list(col=adjustcolor("dodgerblue1", alpha.f = 0.09)),
xlim=xlim, ylim=ylim, alpha=0.8,xaxt="n",yaxt="n")这会导致

然而,为什么要对每一行进行单独的回归分析呢?在这种情况下(如果您没有进行单独分析的特殊理由),我将将这两个数据集连接在一起并对它们进行分析,然后用visreg()绘图使大大简化(并且置信区间的宽度减小了!):
data_combined <- rbind(data.frame(Climate = "Humid", Humid2a),
data.frame(Climate = "Wet-subhumid", WSH2a))
fit_combined <- lm(CO ~ SM*Climate, data = data_combined)
visreg(fit_combined, "SM", by = "Climate", overlay = TRUE,
main = "(a) Scatterplots without soil moisture (Dry season)",
points=list(cex=1))

或者,如果仍然需要自定义x限制,请将最后一行替换为
visreg_data <- visreg(fit_combined, "SM", by = "Climate", plot = FALSE)
plot.visreg(visreg_data, overlay = TRUE, xlim = c(0.05, 0.31))但是,我确实同意,默认的情节(或者至少应该是一种选择)将每个置信区间的范围限制在因子变量的那个级别的数据范围内,比如ggplot2:
library(ggplot2)
ggplot(data_combined, aes(SM, CO, color=Climate)) + stat_smooth(method = "lm") + geom_point()

visreg有更多的模型选项,而不是ggplot (我认为),所以有这个选项是很好的。
https://stackoverflow.com/questions/32102636
复制相似问题