Getting a plot to wrap from right to left
22 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Bill Symolon
el 14 de Abr. de 2018
Comentada: Bill Symolon
el 15 de Abr. de 2018
Hello, All. I have a set of points to plot and fit a function (the end result should be a sine function). Here's the code I'm using and it works just like you'd expect it to:
x = [-65.0600; -0.5310; 71.5820; 137.4960; -153.9860; -87.7790];
y = [0.1000; 18.9260; 11.4630; -12.4760; -18.9610; 1.5900];
plot(x, y, 'ro', 'MarkerSize', 10);
interpolatedX = linspace(min(x), max(x), 500);
interpolatedY = spline(x,y,interpolatedX);
hold on;
plot(interpolatedX, interpolatedY, 'b-', 'LineWidth', 3);
grid on;
xlabel('longitude');
ylabel('latitude');
The problem is it's not what I need. Rather than try to explain, I've attached a .jpg of what I'm trying to achieve. I'd prefer to have the plot to wrap from right to left, as shown. If that's not possible, the entire plot can shift. The bottom line is that the interpolated line needs to start with x(1),y(1), end with x(6),y(6) and fit a sine function. Thanks for the help!
0 comentarios
Respuesta aceptada
David Goodmanson
el 15 de Abr. de 2018
Hi Bill,
You have six points whose real starting point is evidently at x = -65. The idea here is to take the two leftmost x points and put them to the right by adding 360 degrees. Then do the spline. That's shown in figure 1. To get a plot like the example you have to cut out a part of that curve and move it back to the left. That's the process for figure 2.
x = [-65.0600; -0.5310; 71.5820; 137.4960; -153.9860; -87.7790];
y = [0.1000; 18.9260; 11.4630; -12.4760; -18.9610; 1.5900];
% move two x points to the right
x1 = x;
x1(x1<-75) = x1(x1<-75) + 360;
interpolatedX = linspace(min(x1), max(x1), 500);
interpolatedY = spline(x1,y,interpolatedX);
figure(1)
plot(x1,y,'ro',interpolatedX,interpolatedY,'b')
% cut out the part greater than 160 degrees, move it to the left
ind = interpolatedX > 160;
piece1X = interpolatedX(ind)-360;
piece1Y = interpolatedY(ind);
piece2X = interpolatedX(~ind);
piece2Y = interpolatedY(~ind);
figure(2)
plot(piece1X,piece1Y,'b',piece2X,piece2Y,'b','LineWidth', 3)
hold on
plot(x,y,'ro','MarkerSize', 10)
hold off
Más respuestas (0)
Ver también
Categorías
Más información sobre Line Plots en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!