1

R の 'curve' 関数について 1 つ質問があります。私のアイデアを実装するのに最適な方法ではないかもしれませんが、ここで説明します。

複数のセグメントで構成される関数をプロットしようとしていました。違いは傾斜にあります。説明のためだけに、最初の部分は [0,10] の "y = 1300 - 3.83*x" のようなものです。次のセグメント "y = 1300-4.41*t" は [11,20] にあり、以下のコードに従って同様です。

    seg1 <- function(t) 1300-3.83*t
    curve(seg1, 0, 10, n=1000,xlim=c(0,150),ylim=c(0,1400))
    seg2 <- function(t) 1300-4.41*t
    curve(seg2, 10,20,n=1000,add=TRUE)
    seg3 <- function(t) 1300-5.83*t
    curve(seg3, 20,30,n=4000, add=TRUE)
    seg4 <- function(t) 1300-6.71*t
    curve(seg4, 30,50,n=16000,add=TRUE)
    seg5 <- function(t) 1300-7.71*t
    curve(seg5, 50,100,n=10000,add=TRUE)
    seg6 <- function(t) 1300-8.87*t
    curve(seg6,100,150,n=9000,add=TRUE)

ただし、結果のプロットは空白でいっぱいです。ここに追加することはできませんでしたが、空白を含む多くのセグメントではなく、凹面セットのようなものを期待します。接続する必要があります。おそらく、これは R で不連続性を持つ関数をプロットする最良の方法ではありません。

誰か助けてくれませんか?

4

2 に答える 2

0

ポイントを生成するもう 1 つのより柔軟な方法:

segments <- mget(paste0("seg", 1:6)) # A list of functions

ll <- c(0, 10, 20, 30, 50, 100) # Lower limits
ul <- c(10, 20, 30, 50, 100, 150) # Upper limits
k <- length(ll) # Number of segments
n <- 100 # Points per each segment

myfun <- function(ll, ul, n)
  c(mapply(function(s, l, u) s(seq(l, u, length = n)), segments, ll, ul))

plot(y = myfun(ll, ul, n), x = seq(ll[1], ul[k], length = n * k), type = 'l')
于 2015-12-02T18:55:18.490 に答える
0

を使用する代わりにポイントを生成するのはどうcurveですか?

seg1 <- function(t) 1300-3.83*t
seg2 <- function(t) 1300-4.41*t
seg3 <- function(t) 1300-5.83*t
seg4 <- function(t) 1300-6.71*t
seg5 <- function(t) 1300-7.71*t
seg6 <- function(t) 1300-8.87*t

step <- 0.5 # Smaller for better look but slower to plot
y <- c(seg1(seq(0,10,step)),
       seg2(seq(10,20,step)),
       seg3(seq(20,30,step)),
       seg4(seq(30,50,step)),
       seg5(seq(50,100,step)),
       seg6(seq(100,150,step)))
plot(y, type='l', xlim=c(0,150), ylim=c(0,1400))

編集:

あなたの投稿は間違っていますが、あなたのコメントを正しく理解している場合は、コード内のfromandtoを同じ番号に変更する必要があります。

seg1 <- function(t) 1300-3.83*t
seg2 <- function(t) 1300-4.41*t
seg3 <- function(t) 1300-5.83*t
seg4 <- function(t) 1300-6.71*t
seg5 <- function(t) 1300-7.71*t
seg6 <- function(t) 1300-8.87*t

curve(seg1, 0, 150, n=1000,xlim=c(0,150),ylim=c(0,1400))
curve(seg2, 0,150,n=1000,add=TRUE)
curve(seg3, 0,150,n=1000, add=TRUE)
curve(seg4, 0,150,n=1000,add=TRUE)
curve(seg5, 0,150,n=1000,add=TRUE)
curve(seg6, 0,150,n=1000,add=TRUE)
于 2015-12-02T18:27:25.123 に答える