Plotting wind magnitude time series and direction as indicator arrows
11 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Hi all,
I am trying to plot wind time series for 1 point, where I have magnitude and direction. I would like to have a regular 2D plot of the magnitude but then I want to add an arrow indicating the direction at each plotted point in time, as shown in the attached figure.
would appreciate any help executing this or other suggestions to plot magnitude and direction time series (other than the straightforward ways obviously (e.g.,quiver..etc)
Cheers,
NZ
0 comentarios
Respuestas (1)
VINAYAK LUHA
el 22 de Sept. de 2023
Hi Nayef,
It is my understanding that you have a time series dataset where each datapoint corresponds to some wind magnitude, additionally you have an array representing the wind direction at these datapoints. You want to know an alternate way than using the traditional “quiver” function to represent wind direction using arrows at these plotted data points.
Here’s a possible workaround for your reference-
Hi Nayef,
It is my understanding that you have a time series dataset where each datapoint corresponds to some wind magnitude, additionally you have an array representing the wind direction at these datapoints. You want to know an alternate way than using the traditional “quiver” function to represent wind direction using arrows at these plotted data points.
Here’s a possible workaround for your reference-
% Generating random data
time = 1:10;
magnitude = [3 6 4 8 5 7 6 9 4 7];
direction = [30 45 60 75 90 105 120 135 150 165]; %in degrees
% Plotting magnitude
plot(time, magnitude, 'b', 'LineWidth', 2);
hold on;
% Add arrows indicating the direction
arrowLength = max(magnitude) * 0.05;
arrowX = time;
arrowY = magnitude;
arrowAngle = deg2rad(direction);
arrowXEnd = arrowX + arrowLength * cos(arrowAngle);
arrowYEnd = arrowY + arrowLength * sin(arrowAngle);
for i = 1:numel(time)
drawArrow([arrowX(i), arrowY(i)], [arrowXEnd(i), arrowYEnd(i)], 'r', 0.08, 25);
end
% Custom function to draw an arrow
function drawArrow(startPoint, endPoint, color, lineWidth, tipAngle)
% Calculate arrowhead points
arrowLength = norm(endPoint - startPoint);
arrowHeadLength = arrowLength * tan(deg2rad(tipAngle));
arrowHeadWidth = arrowHeadLength / 2;
arrowHeadPoints = [0, arrowHeadWidth; arrowHeadLength, 0; 0, -arrowHeadWidth];
% Rotate and translate arrowhead points
theta = atan2(endPoint(2) - startPoint(2), endPoint(1) - startPoint(1));
R = [cos(theta), -sin(theta); sin(theta), cos(theta)];
arrowHeadPoints = (R * arrowHeadPoints')';
arrowHeadPoints = arrowHeadPoints + endPoint;
% Draw arrow
line([startPoint(1), endPoint(1)], [startPoint(2), endPoint(2)], 'Color', color, 'LineWidth', lineWidth);
patch(arrowHeadPoints(:, 1), arrowHeadPoints(:, 2), color, 'EdgeColor', color, 'LineWidth', lineWidth);
end
Regards
Vinayak Luha
0 comentarios
Ver también
Categorías
Más información sobre 2-D and 3-D 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!