2015-11-13 10 views
6

Rプログラミング言語のプロット関数には簡単な問題があります。私は点(see this linkhow to plot in R)の間に線を描きたいと思いますが、私は何か奇妙なものを得ています。私は1つのポイントだけ別のポイントと接続されているので、私は連続的な方法で関数を見ることができますが、私のプロットポイントでランダムにいくつかの他のポイントが接続されています。 2番目のプロットを見てください。以下はプロット関数の点をRに接続する線

コードされています

x <- runif(100, -1,1) # inputs: uniformly distributed [-1,1] 
noise <- rnorm(length(x), 0, 0.2) # normally distributed noise (mean=0, sd=0.2) 
f_x <- 8*x^4 - 10*x^2 + x - 4 # f(x), signal without noise 
y <- f_x + noise # signal with noise 

# plots 
x11() 
# plot of noisy data (y) 
plot(x, y, xlim=range(x), ylim=range(y), xlab="x", ylab="y", 
    main = "observed noisy data", pch=16) 

x11() 
# plot of noiseless data (f_x) 
plot(x, f_x, xlim=range(x), ylim=range(f_x), xlab="x", ylab="y", 
    main = "noise-less data",pch=16) 
lines(x, f_x, xlim=range(x), ylim=range(f_x), pch=16) 

# NOTE: I have also tried this (type="l" is supposed to create lines between the points in the right order), but also not working: 
plot(x, f_x, xlim=range(x), ylim=range(f_x), xlab="x", ylab="y", 
    main = "noise-less data", pch=16, type="l") 

最初のプロットは正しいです:enter image description here 第二は、私が欲しいものではありませんが、私は連続プロットしたい:enter image description here

+0

参照[Plot、lines and disordered x and y](http://r.789695.n4.nabble.com/Plot-lines-and-disordered-x-and-y-td-880487.html) – Henrik

答えて

13

をあなたはxの値をソートする必要があり:

plot(x, f_x, xlim=range(x), ylim=range(f_x), xlab="x", ylab="y", 
    main = "noise-less data",pch=16) 
lines(x[order(x)], f_x[order(x)], xlim=range(x), ylim=range(f_x), pch=16) 

enter image description here

+0

こんにちは、ありがとうたくさん。 「x」と「f_x」の値をソートする必要がある理由を説明してください。 – Sanchit

+2

グラフを描画するには単調増加のx値が必要なためです。 – rcs

+1

'x < - sort(runif(100、-1,1))'の最初の行を修正すると、プロット文も問題なく機能します。 – rcs

関連する問題