How to create a stickplot?

62 views (last 30 days)
Emi
Emi on 6 Dec 2020
Commented: Mathieu NOE on 2 Oct 2023
Hello,
I am trying to create a stickplot in MATLAB (velocity vector vs time), for which I'm using the stickplot.m function (attached). I have also attached a demo so you can see the result of the function. I need to change the size of the vectors, can you help me? It would be much appreciated, I'm struggling with this for over a week now.
Thank you in advance

Accepted Answer

Mathieu NOE
Mathieu NOE on 15 Dec 2020
hello
I interpreted your request as you want to change the LineWidth of the vector so it can look thicker
I added this parameter in the function - very easy
see the results (attached)
  25 Comments
indika kathaluwa weligamage
Dear Mathieu
Stick plot is Very Beautiful and meaning full.
I tried your stick plot function for my data set.
It makes error, (Uf or variable 'myslidingavg')
Highly appreciate your help for correct this.
Kind Regard
INDIKA
% STICKDEMO This demo shows what you can do easily with STICKPLOT
% RP (WHOI) 15/Jan/91
clc
clear all;
load power_2022new.txt;
u=power_2022new(:,4);
v=power_2022new(:,5);
t=power_2022new(:,1);
% load u.mat
% load v.mat
% load t.mat
% my preference : replace NaN with zero
u(isnan(u)) = 0;
v(isnan(v)) = 0;
% display only first n samples (rest is zero)
%n = 500;
n = 366; % year data
t = t(1:n);
u = u(1:n);
v = v(1:n);
% smooting the angle
ind = find(abs(u)>eps & abs(v)>eps);
theta = zeros(size(t));
theta(ind) = atan(v(ind)./u(ind));
N_smooth = 3; % nb op points used in the averaging (the higher the smoother)
theta_smoothed = myslidingavg(theta, N_smooth);
mod = sqrt(u.^2+v.^2);
u_smoothed = mod.*cos(theta_smoothed);
v_smoothed = mod.*sin(theta_smoothed);
LineWidth1 = 2.5;
LineWidth2 = 1.5;
scale_factor = 8; % original value is 8, adapt to your onw needs (increase it if vectors overlap)
figure(1),stickplot(t,u,v,[0 length(t)],'m/s',['series 1'],LineWidth1,LineWidth2,scale_factor);grid
title('No angle smoothing');
% figure(2),plot(t,theta,'b',t,theta_smoothed,'r')
% figure(3),stickplot(t,u_smoothed,v_smoothed,[0 length(t)],'m/s',['series 1'],LineWidth1,LineWidth2,scale_factor);grid
% title('With angle smoothing');
% % figure,plot(t,u,'-+b',t,v,'-+r');grid
% %
% % figure, feather(u,v)
figure(2),
scale = 1;
% quiver(u,v)
quiver(t,0,u,v,scale)
axis equal
% QUIVER(U,V,S) or QUIVER(X,Y,U,V,S) automatically scales the
% arrows to fit within the grid and then stretches them by S. Use
% S=0 to plot the arrows without the automatic scaling.
1 58.5 4.39
2 62.81 5.99
3 69.56 5.83
4 67 4.88
5 110.44 2.09
6 78.25 3.9
7 69.69 4.26
8 40.31 3.02
9 58.81 3.69
10 118.62 2.11
11 125.12 2.11
12 163.56 2.31
13 197.88 2.56
14 126.88 1.77
15 75.06 1.72
16 55.69 4.48
17 62.5 5.11
18 61.44 4.14
19 44.81 4.49
20 130.12 2.73
21 255.25 1.59
22 216 1.54
23 141.62 1.45
24 120.94 1.8
25 93.25 2.52
26 60.5 2.71
27 49.88 3.48
28 76.25 3.53
29 108.25 3.03
30 90.44 3.49
Mathieu NOE
Mathieu NOE on 2 Oct 2023
attached is the function myslindingavg
nota that now matlab has also plenty of option to smooth data like smoothdata

Sign in to comment.

More Answers (0)

Categories

Find more on Line Plots in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!