[英]shade area between two 'ablines' in R
我想在下面的代碼中為兩個ablines之間的區域加陰影。 但是我所能達到的只是連接兩個退位線。 有沒有簡單的方法來解決這個問題? 也歡迎更復雜的解決方案!
x1s <- c(.5,1,1,2,3,3.5, 1,3.5,4,5,5.5,6)
x2s <- c(3.5,1,2.5,2,1,1.2, 5.8,3,4,5,4,1)
ys <- c(rep(+1,6), rep(-1,6))
my.data <- data.frame(x1=x1s, x2=x2s, type=as.factor(ys))
my.data
library('e1071')
svm.model <- svm(type ~ ., data=my.data, type='C-classification', kernel='linear',scale=FALSE)
plot(my.data[,-3],col=(ys+3)/2, pch=19, xlim=c(-1,6), ylim=c(-1,6))
points(my.data[svm.model$index,c(1,2)],col="blue",cex=2) # show the support vectors
w <- t(svm.model$coefs) %*% svm.model$SV
b <- -svm.model$rho
p <- svm.model$SV
abline(a=-b/w[1,2], b=-w[1,1]/w[1,2], col="black", lty=1)
abline(a=(-b-1)/w[1,2], b=-w[1,1]/w[1,2], col="orange", lty=3)
abline(a=(-b+1)/w[1,2], b=-w[1,1]/w[1,2], col="orange", lty=3)
polygon(c(0,0), c((-b-1)/w[1,2],(-b+1)/w[1,2]), col = 'grey80', border = NA)
我的方法是使用函數curve
而不是abline
,以保持兩條線的路徑坐標並將其饋送到`polygon:
c1 <- curve((-b-1)/w[1,2] - x*w[1,1]/w[1,2], from=-10, to=10,
col="orange",add=TRUE,lty=3)
c2 <- curve((-b+1)/w[1,2] - x*w[1,1]/w[1,2], from=-10, to=10,
col="orange",add=TRUE,lty=3)
polygon(c(c1$x,rev(c2$x)), c(c1$y, rev(c2$y)),col="grey80", border=NA)
編輯 :朱利安烏爾巴諾正確的建議,你可以使用par('usr')
定義的參數值from
和to
自動:
u <- par('usr')
c1 <- curve((-b-1)/w[1,2] - x*w[1,1]/w[1,2], from=u[1], to=u[2],
col="orange",add=TRUE,lty=3)
c2 <- curve((-b+1)/w[1,2] - x*w[1,1]/w[1,2], from=u[1], to=u[2],
col="orange",add=TRUE,lty=3)
polygon(c(c1$x,rev(c2$x)), c(c1$y, rev(c2$y)),col="grey80", border=NA)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.