[英]How to plot a simple piecewise linear function?
图像说明了我的绘图目标。 在此图像上,忽略x1上的垂直斜率。 完全没有意义。 在x取值x1或更大值后,函数根本没有定义,或者y取0。
我有以下分段线性函数,有两个条件。 你如何在R中绘制? 从语义上讲,我想声明:“如果x等于或大于20(x1),则y必须为零,否则y等于mx + y1-mx1。” 。 该斜率muss减小并且在20处将y设置为零。
f(x)= {mx + y 1 - mx 1,如果0≤x<x 1 0,如果x≥x1到目前为止,我试过这个(不确定如何设置y1)
Error in xy.coords(x, y, xlabel, ylabel, log) :
'x' and 'y' lengths differ
当然,这会导致错误。
Error in xy.coords(x, y, xlabel, ylabel, log) : 'x' and 'y' lengths differ
我不确定如何表示y和y1。
定义您需要的功能:
myf<-function(x, x1=20, y1=50, m=-2){
firstInds<-intersect(which(x >= 0), which(x < x1))
y<-x
y[firstInds]<-m*x[firstInds]+y1-m*x1
y[-firstInds]<-0
y
}
然后使用它:
x<-1:50
plot(x, myf(x))
就那么简单。
如果你想要连接点的线,你可以做
plot(x, myf(x), ylab="Y", xlab="X"); lines(x, myf(x), col="red")
对于这种情节,最简单的可能是使用函数curve
:
m <- -2
x1 <- 20
y1 <- 40
plot(NA,xlim=c(0,40),ylim=c(0,100), xaxs="i",yaxs="i") #Setting first an empty plot
#where to plot your curve
curve(m*x+y1-m*x1, from=0, to=x1, add=TRUE) #Then your curve
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.