Moving graph along x-axis
91 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Sokratis Panagiotidis
le 17 Avr 2022
Modifié(e) : Sokratis Panagiotidis
le 27 Avr 2022
Hi,
I am trying to plot 3 different vectors that showcase the same function but with different starting points from the y-axis.
Now what I wanna do is move the yellow and the red graph so they overlap with the blue one, to see wether my determined data actually is correct. I have another picture here to further show what exactly I mean:
Now I have tried to do something similar but with the y-axis but unfortunately I couldn't make it work.
What would be a clever way to move the graphs without having to change the values of the vectors?
2 commentaires
Torsten
le 17 Avr 2022
Now what I wanna do is move the yellow and the red graph so they overlap with the blue one, to see wether my determined data actually is correct.
Better work with the data, not with the graphics.
Réponse acceptée
Tala
le 17 Avr 2022
Modifié(e) : Tala
le 18 Avr 2022
I would subtitute the other 2 array in the main one and plot that. something lik ethis:
id1 = find(blue==yellow(1)); % the index on the blue curve that matches the first value of yellow
id2 = find(blue==red(1)); % the index on the blue curve that matches the first value of red
now use the id values to create a new array. newblue contain the values from blue, yellow and red curves, and you can just plot newblue.
newblue=blue;
newblue(id1:end)=yellow;
newblue(id2:end)=red;
7 commentaires
Tala
le 19 Avr 2022
Modifié(e) : Tala
le 19 Avr 2022
You basically need to move your curves along th X axis; in other words you need to plot(x+dx,y). To define dx you need to clean up your data. in the code below, I removed all nans and chose the last value (because there is no "jump") as the ref point and moved all the curves. As you see you have a better match towards the tail of the curves because the ref point is the last point.
You could clean up your data and get rid of the jump in the start of blue curve and use the first element as your ref point, then you get a better match towards the beginning. In that case just change "end" to "1"
you could take the avarage of first and last, or even interpolate over a unique x aeeay, and move each point individually using this method
X1=data.x1;Y1=data.y1;X2=data.x2;Y2=data.y2;X3=data.x3;Y3=data.y3;
% removing nans
TF = find(~isnan(Y1));
Y1N=Y1(TF);
X1N=X1(TF);
TF = find(~isnan(Y2));
Y2N=Y2(TF);
X2N=X2(TF);
TF = find(~isnan(Y3));
Y3N=Y3(TF);
X3N=X3(TF);
% now plot arrays with no nans
plot(X1N,Y1N)
hold on
plot(X2N,Y2N)
plot(X3N,Y3N)
% defining dx and moving your plots
d13=(X1N(end)-X3N(end));
plot(X3N+d13,Y3N);
d12=(X1N(end)-X2N(end));
plot(X2N+d12,Y2N);
Plus de réponses (1)
Matt J
le 17 Avr 2022
Modifié(e) : Matt J
le 17 Avr 2022
Let's call your 3 data sets (x0,y0), (x1,y1), (x2,y2) where (x0,y0) are your target data points. Then I might try something like this:
x1_shifted=x1-mean(x1)+mean(interp1(y0,x0,y1));
x2_shifted=x2-mean(x2)+mean(interp1(y0,x0,y2));
0 commentaires
Voir également
Catégories
En savoir plus sur Graph and Network Algorithms dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!