I have some x data and y data which I want to plot.
My x data looks like this:
[326,406,406,449,491,491,1353,1353,2379,2379, ...]
the corrosponding y data looks like this:
[3.46,3.48,3.48,3.48,3.49,3.49,3.49,3.49,3.49,3.49, ...]
Imagine I want to modify my x data in such a way that it is of fixed length.
But simply slicing like this for exmaple: x = x(1:100)
would not be good, because then I would also loose the data after the 100th x data point.
I need it to be this way: Having x data as an array of fixed length but also modifying y data in such a way that I don't see a difference when I plot y vs x (except for the fact that x now has a different length and different values, e.g. from 1:100).
I hope you understand what I'm trying to do. I was playing around with interp1 but sadly I did not achieve anything useful.
Thanks in advance!
EDIT For better illustration: Imagine my y vs. x data looks like this:
My goal is to simple modify my x and y data in such a way that the x data would range from 1:100 for example, but the curve would still be looking the same.
So basically: Sampling the data
CodePudding user response:
You can use the downsample
function as follows:
x = [326,406,406,449,491,491,1353,1353,2379,2379, ...];
y = [3.46,3.48,3.48,3.48,3.49,3.49,3.49,3.49,3.49,3.49, ...];
n = 100; % number of samples
down_x = downsample(x,n);
down_y = downsample(y,n);
CodePudding user response:
I was able to solve my problem like this:
x_new = linspace(min(x_data), max(x_data), number_of_x_points);
y_new = interp1(x_data, y_data, x_new, 'linear');