web-dev-qa-db-fra.com

Ligne reliant les points de la fonction de tracé dans R

J'ai un problème simple dans la fonction de tracé du langage de programmation R. Je veux tracer une ligne entre les points ( voir ce lien et comment tracer dans R ), cependant, ce que j'obtiens quelque chose de bizarre. Je veux qu'un seul point soit connecté à un autre point, afin que je puisse voir la fonction de manière continue, cependant, dans mon tracé, les points sont connectés de manière aléatoire à d'autres points. S'il vous plaît voir le deuxième complot.

Voici le code:

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

Le premier tracé est correct: enter image description here Alors que le second n'est pas ce que je veux, je veux un tracé continu: enter image description here

10
Sanchit

Vous devez trier les valeurs 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

16
rcs