2015-11-13 14 views
6

Mam prosty problem w funkcji wykresu języka programowania R. Chcę narysować linię między punktami (see this link i how to plot in R), jednak otrzymuję coś dziwnego. Chcę, aby tylko jeden punkt był połączony z innym punktem, dzięki czemu widzę funkcję w sposób ciągły, jednak w moich punktach fabuły są losowo połączone jakieś inne punkty. Zobacz drugi wątek.Linia łącząca punkty w funkcji fabuły w R

Poniżej znajduje się kod:

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") 

Pierwsza działka jest prawidłowa: enter image description here Choć sekundy nie jest to, co chcę, chcę ciągłą działki: enter image description here

+0

Zobacz także [Wykres, linie i nieuporządkowane xiy] (http://r.789695.n4.nabble.com/Plot-lines-and-disordered-x-and-y-td880487.html) – Henrik

Odpowiedz

13

Musisz uporządkować wartości 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

Witaj, dzięki dużo. Czy możesz wyjaśnić, dlaczego należy sortować wartości "x" i "f_x"? – Sanchit

+2

Ponieważ potrzebny jest monotonowy wzrost wartości x, aby narysować wykres. – rcs

+1

jeśli zmodyfikujesz pierwszą linię 'x <- sort (runif (100, -1,1)), to będą działały również twoje instrukcje dotyczące wykresów z tego pytania. – rcs

Powiązane problemy