R:从曲线绘制采样值时出现问题

时间:2018-12-04 08:08:27

标签: r plot

我正在尝试模拟信号以应用某些非线性拟合方法,但是在绘制信号时遇到了一些问题。

x<-sample(seq(0,1,length.out = 1000),200)
y<-2*sin(4*pi*x)-6*abs(x-0.4)^(0.3)+2*exp(-30*(4*x-2)^2)+8*x+rnorm(200,0,0.5)
s<-2*sin(4*pi*x)-6*abs(x-0.4)^(0.3)+2*exp(-30*(4*x-2)^2)+8*x
plot(x,y)
lines(x,s,col="red")

这个想法我想用加性白噪声项对200个观测值进行均匀采样,并且我想将此“扰动”信号与原始信号一起绘制。 (分别为y和s)。 事实是,如果我使用自己编写的代码,则得到的结果如下:

enter image description here

可能是一件很简单的事情,但我对此颇有感触。

任何提示或建议将不胜感激。

2 个答案:

答案 0 :(得分:2)

线是按顺序绘制的,因此您决定随机绘制X值,因此在x中彼此相邻的x值在轴上并不彼此相邻,因此很混乱。对其进行排序:

x<-sort(sample(seq(0,1,length.out = 1000),200))
y<-2*sin(4*pi*x)-6*abs(x-0.4)^(0.3)+2*exp(-30*(4*x-2)^2)+8*x+rnorm(200,0,0.5)
s<-2*sin(4*pi*x)-6*abs(x-0.4)^(0.3)+2*exp(-30*(4*x-2)^2)+8*x
plot(x,y)
lines(x,s,col="red")

mickey提到的即时执行此操作的另一种方法是:

ord = order(x)
lines(x[ord], s[ord], col = 'red')

enter image description here

答案 1 :(得分:0)

您需要按照升序对x观测值进行重新排序,可以通过将所有内容存储在dataframe对象中然后对其进行排序来实现:

x<-sample(seq(0,1,length.out = 1000),200)
df_p= data.frame(x)
df_p$y<-2*sin(4*pi*df_p$x)-6*abs(df_p$x-0.4)^(0.3)+2*exp(-30*(4*df_p$x-2)^2)+8*df_p$x+rnorm(200,0,0.5)
df_p$s<-2*sin(4*pi*df_p$x)-6*abs(df_p$x-0.4)^(0.3)+2*exp(-30*(4*df_p$x-2)^2)+8*df_p$x

df_p = df_p[order(df_p$x),]

plot(df_p$x,df_p$y)
lines(df_p$x, df_p$s,col="red")

如果您想避免此步骤,则可以使用ggplot2库:

p <- ggplot(df_p) + geom_point(aes(x = x,y= y)) + geom_line(aes(x=x,y=s,color='red'))
plot(p)