How to make different character for each legend in my code?

조회 수: 3 (최근 30일)
mehmet salihi
mehmet salihi 2022년 1월 1일
편집: Sulaymon Eshkabilov 2022년 1월 2일
Hi everyone,
I am trying to give each line different legend charcter like * or o to distinguish better among them.
I am asking about the case when k>3.
could you please help me about this. thanks
like the legend shapes as shown here
close all
clear all
clc
%%% Fixed Parameters
B = 2; % Number of Blades
R = 10.06; % Blade Radius in meter
Rho = 1.225; % Density of air kg/m3
w = 7.501; % Rotational Speed rad/s
Theta_P = -3; % Tip Pitch Angle in degree
ac = 0.2; % Glauert correction
eps = 1e-5; % Error tolerance
nc=1:1:16; % number of configurations for effect off different distribution
%%% Airfoil Date
afoil = readmatrix('airfoil data5e5.xlsx');
Aoa = afoil(:,1);
Cl = afoil(:,2);
Cd = afoil(:,3);
Velocity =[5,6,7,8,9,11]; % Wind Speed m/s
MTotal=[];
%%% Torque vs Velocity Data
torquee = readmatrix('TorqueWindSpeedExperi.xlsx');
vupper=torquee(1:5,1); % Radial Distance in meter
vlower=torquee(6:10,1); % Chord length in meter
torquelower=torquee(1:5,2); % Twist in degree
torqueupper=torquee(6:10,2);
%%% Given Blade Data
sections = readmatrix('chord and twist 15 distributions.xlsx');
iter=0;
for k=3:2:33
iter=iter+1; % used in legends in plots
r=sections(1:26,2); % Radial Distance in meter
SS=sections(1:26,3); % Span Station %
Chord=sections(1:26,k+1); % Chord length in meter
Beta=sections(1:26,k+2); % Twist in degree
for j=1:length(Velocity)
for i = 8:length(r)
sigma(i) = (B*Chord(i))/(2*pi*r(i));
a=0;
a_prime=0;
alist(i)=[0];
alistprime(i)=[0];
for n=1:1000
Phi = atand(((1-a)*Velocity(j))/((1+a_prime)*w*r(i))); % Flow Angle
Theta = Beta(i) + Theta_P ;
aoa = Phi- Theta; % local angle of attack in degree
f = (B/2)* ((R-r(i))/(r(i)*sind(Phi)));
F = (2/pi)*acos(exp(-f)); % Prandtl correction factor
cl=interp1(Aoa,Cl,aoa,'linear','extrap');
cd=interp1(Aoa,Cd,aoa,'linear','extrap');
Cn = cl*cosd(Phi)+cd*sind(Phi);
Ct =cl*sind(Phi)-cd*cosd(Phi);
K=(4*F*(sind(Phi))^2)/(sigma(i)*Cn);
%%%%%%%%%% a and ac condition
a = 1/(((4*F*(sind(Phi)^2))/(sigma(i)*Cn))+1);
if a < ac || a==ac
a=a;
else
a = 0.5*(2+K*(1-2*ac)-sqrt(((K*(1-2*ac)+2)^2)+4*((K*(ac^2))-1)));
end
a_prime =1/(((4*F*(sind(Phi)*cosd(Phi)))/(sigma(i)*Ct))-1);
alist(i,n+1)=a;
alistprime(i,n+1)=a_prime;
%%% condition for epsilon or tolerance
if a-alist(i,n) < eps && a_prime-alistprime(i,n) < eps
break;
end
end
%%% V relative
v_rel(i) = sqrt( (Velocity(j)*(1-alist(end)))^2 + (w*r(i)*(1+alistprime(end)))^2 );
%%% The tangential force per length Pt
Pt(i) = 0.5*Rho*(v_rel(i)^2)*Chord(i)*Ct;
end
for i=8:length(Pt)-1
Ai(i) = (Pt(i+1)-Pt(i) ) / (r(i+1)-r(i));
Bi(i) = ((Pt(i)*r(i+1))-(Pt(i+1)*r(i)) ) / (r(i+1)-r(i));
Pt_total(i) = Ai(i)*r(i)+Bi(i);
end
for i=8:length(Pt)-1
M(i) = ((1/3)*Ai(i)*((r(i+1)^3)-(r(i)^3))) + ((0.5)*Bi(i)*((r(i+1)^2)-(r(i)^2)));
end
% % total shaft torque and power
MTotal(j) = B* sum(M);
Power(j)=MTotal(j)*w*1e-3;
if k==3
TorqueBaseline=MTotal;
end
end
if k==3
figure(1)
hold on
leg = sprintf(' Baseline ');
plot(Velocity,MTotal,'-oblack','LineWidth',1.5, 'displayname', leg); grid on
end
if k>3
figure(1)
hold on
leg = sprintf('config %g',nc(iter)-1);
plot(Velocity,MTotal, 'displayname', leg); grid on
xlabel(' Wind Speed (m/s) '); ylabel(' Torque (Nm) ');
set(gca,'XTick',(4:1:20)); set(gca,'YTick',(0:300:1800))
ylim([0 1800]); xlim([4 20]);
end
if k==33
figure(1)
hold on
leg = sprintf('Experimental upper range ');
plot(vupper,torqueupper,'-or','LineWidth',1.5, 'displayname', leg)
figure(1)
hold on
leg = sprintf('Experimental lower range ');
plot(vlower,torquelower,'-or','LineWidth',1.5,'displayname', leg)
end
for i =1
if Aoa(i)>-19
title(' Reynolds number = 500.000' )
else
title(' Reynolds number = 1.000.000' )
end
end
end
legend show

채택된 답변

Cris LaPierre
Cris LaPierre 2022년 1월 1일
Markers in your legend come from the linespec used when plotting your line. Plot each line with a different marker style. MATLAB has 15 markers to pick from.
Somewhere in your code before the for loop define the markers:
mrkr = 'o+*.x_|sd^v><ph';
and then when you plot, add a marker style to your code
plot(Velocity,MTotal,"Marker",mrkr(nc(iter)-1),'displayname', leg);
This will only work if you have <=15 lines to plot.
  댓글 수: 3
mehmet salihi
mehmet salihi 2022년 1월 1일
I solve it, thanks one more again.
Cris LaPierre
Cris LaPierre 2022년 1월 1일
Did you leave off the code for the legend?
%%% Fixed Parameters
B = 2; % Number of Blades
R = 10.06; % Blade Radius in meter
Rho = 1.225; % Density of air kg/m3
w = 7.501; % Rotational Speed rad/s
Theta_P = -3; % Tip Pitch Angle in degree
ac = 0.2; % Glauert correction
eps = 1e-5; % Error tolerance
mrkr = 'o+*.x_|sd^v><ph';
nc=1:1:16; % number of configurations for effect off different distribution
%%% Airfoil Date
afoil = readmatrix('airfoil data5e5.xlsx');
Aoa = afoil(:,1);
Cl = afoil(:,2);
Cd = afoil(:,3);
Velocity =[5,6,7,8,9,11]; % Wind Speed m/s
MTotal=[];
%%% Torque vs Velocity Data
torquee = readmatrix('TorqueWindSpeedExperi.xlsx');
vupper=torquee(1:5,1); % Radial Distance in meter
vlower=torquee(6:10,1); % Chord length in meter
torquelower=torquee(1:5,2); % Twist in degree
torqueupper=torquee(6:10,2);
%%% Given Blade Data
sections = readmatrix('chord and twist 15 distributions.xlsx');
iter=0;
for k=3:2:33
iter=iter+1; % used in legends in plots
r=sections(1:26,2); % Radial Distance in meter
SS=sections(1:26,3); % Span Station %
Chord=sections(1:26,k+1); % Chord length in meter
Beta=sections(1:26,k+2); % Twist in degree
for j=1:length(Velocity)
for i = 8:length(r)
sigma(i) = (B*Chord(i))/(2*pi*r(i));
a=0;
a_prime=0;
alist(i)=[0];
alistprime(i)=[0];
for n=1:1000
Phi = atand(((1-a)*Velocity(j))/((1+a_prime)*w*r(i))); % Flow Angle
Theta = Beta(i) + Theta_P ;
aoa = Phi- Theta; % local angle of attack in degree
f = (B/2)* ((R-r(i))/(r(i)*sind(Phi)));
F = (2/pi)*acos(exp(-f)); % Prandtl correction factor
cl=interp1(Aoa,Cl,aoa,'linear','extrap');
cd=interp1(Aoa,Cd,aoa,'linear','extrap');
Cn = cl*cosd(Phi)+cd*sind(Phi);
Ct =cl*sind(Phi)-cd*cosd(Phi);
K=(4*F*(sind(Phi))^2)/(sigma(i)*Cn);
%%%%%%%%%% a and ac condition
a = 1/(((4*F*(sind(Phi)^2))/(sigma(i)*Cn))+1);
if a < ac || a==ac
a=a;
else
a = 0.5*(2+K*(1-2*ac)-sqrt(((K*(1-2*ac)+2)^2)+4*((K*(ac^2))-1)));
end
a_prime =1/(((4*F*(sind(Phi)*cosd(Phi)))/(sigma(i)*Ct))-1);
alist(i,n+1)=a;
alistprime(i,n+1)=a_prime;
%%% condition for epsilon or tolerance
if a-alist(i,n) < eps && a_prime-alistprime(i,n) < eps
break;
end
end
%%% V relative
v_rel(i) = sqrt( (Velocity(j)*(1-alist(end)))^2 + (w*r(i)*(1+alistprime(end)))^2 );
%%% The tangential force per length Pt
Pt(i) = 0.5*Rho*(v_rel(i)^2)*Chord(i)*Ct;
end
for i=8:length(Pt)-1
Ai(i) = (Pt(i+1)-Pt(i) ) / (r(i+1)-r(i));
Bi(i) = ((Pt(i)*r(i+1))-(Pt(i+1)*r(i)) ) / (r(i+1)-r(i));
Pt_total(i) = Ai(i)*r(i)+Bi(i);
end
for i=8:length(Pt)-1
M(i) = ((1/3)*Ai(i)*((r(i+1)^3)-(r(i)^3))) + ((0.5)*Bi(i)*((r(i+1)^2)-(r(i)^2)));
end
% % total shaft torque and power
MTotal(j) = B* sum(M);
Power(j)=MTotal(j)*w*1e-3;
if k==3
TorqueBaseline=MTotal;
end
end
if k==3
figure(1)
hold on
leg = sprintf(' Baseline ');
plot(Velocity,MTotal,'-oblack','LineWidth',1.5, 'displayname', leg); grid on
end
if k>3
figure(1)
hold on
leg = sprintf('config %g',nc(iter)-1);
plot(Velocity,MTotal,"Marker",mrkr(nc(iter)-1),'displayname', leg); grid on
xlabel(' Wind Speed (m/s) '); ylabel(' Torque (Nm) ');
set(gca,'XTick',(4:1:20)); set(gca,'YTick',(0:300:1800))
ylim([0 1800]); xlim([4 20]);
end
if k==33
figure(1)
hold on
leg = sprintf('Experimental upper range ');
plot(vupper,torqueupper,'-or','LineWidth',1.5, 'displayname', leg)
figure(1)
hold on
leg = sprintf('Experimental lower range ');
plot(vlower,torquelower,'-or','LineWidth',1.5,'displayname', leg)
end
for i =1
if Aoa(i)>-19
title(' Reynolds number = 500.000' )
else
title(' Reynolds number = 1.000.000' )
end
end
end
legend show

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Voss
Voss 2022년 1월 1일
close all
clear all
clc
%%% Fixed Parameters
B = 2; % Number of Blades
R = 10.06; % Blade Radius in meter
Rho = 1.225; % Density of air kg/m3
w = 7.501; % Rotational Speed rad/s
Theta_P = -3; % Tip Pitch Angle in degree
ac = 0.2; % Glauert correction
eps = 1e-5; % Error tolerance
nc=1:1:16; % number of configurations for effect off different distribution
%%% Airfoil Date
afoil = readmatrix('airfoil data5e5.xlsx');
Aoa = afoil(:,1);
Cl = afoil(:,2);
Cd = afoil(:,3);
Velocity =[5,6,7,8,9,11]; % Wind Speed m/s
MTotal=[];
%%% Torque vs Velocity Data
torquee = readmatrix('TorqueWindSpeedExperi.xlsx');
vupper=torquee(1:5,1); % Radial Distance in meter
vlower=torquee(6:10,1); % Chord length in meter
torquelower=torquee(1:5,2); % Twist in degree
torqueupper=torquee(6:10,2);
%%% Given Blade Data
sections = readmatrix('chord and twist 15 distributions.xlsx');
iter=0;
n_lines = (33-3)/2+1;
all_markers = '+*.xsd^v><pho';
all_markers = repmat(all_markers,1,ceil(n_lines/numel(all_markers)));
my_markers = repmat(' ',1,33);
my_markers(3:2:33) = all_markers(1:n_lines);
for k=3:2:33
iter=iter+1; % used in legends in plots
r=sections(1:26,2); % Radial Distance in meter
SS=sections(1:26,3); % Span Station %
Chord=sections(1:26,k+1); % Chord length in meter
Beta=sections(1:26,k+2); % Twist in degree
for j=1:length(Velocity)
for i = 8:length(r)
sigma(i) = (B*Chord(i))/(2*pi*r(i));
a=0;
a_prime=0;
alist(i)=[0];
alistprime(i)=[0];
for n=1:1000
Phi = atand(((1-a)*Velocity(j))/((1+a_prime)*w*r(i))); % Flow Angle
Theta = Beta(i) + Theta_P ;
aoa = Phi- Theta; % local angle of attack in degree
f = (B/2)* ((R-r(i))/(r(i)*sind(Phi)));
F = (2/pi)*acos(exp(-f)); % Prandtl correction factor
cl=interp1(Aoa,Cl,aoa,'linear','extrap');
cd=interp1(Aoa,Cd,aoa,'linear','extrap');
Cn = cl*cosd(Phi)+cd*sind(Phi);
Ct =cl*sind(Phi)-cd*cosd(Phi);
K=(4*F*(sind(Phi))^2)/(sigma(i)*Cn);
%%%%%%%%%% a and ac condition
a = 1/(((4*F*(sind(Phi)^2))/(sigma(i)*Cn))+1);
if a < ac || a==ac
a=a;
else
a = 0.5*(2+K*(1-2*ac)-sqrt(((K*(1-2*ac)+2)^2)+4*((K*(ac^2))-1)));
end
a_prime =1/(((4*F*(sind(Phi)*cosd(Phi)))/(sigma(i)*Ct))-1);
alist(i,n+1)=a;
alistprime(i,n+1)=a_prime;
%%% condition for epsilon or tolerance
if a-alist(i,n) < eps && a_prime-alistprime(i,n) < eps
break;
end
end
%%% V relative
v_rel(i) = sqrt( (Velocity(j)*(1-alist(end)))^2 + (w*r(i)*(1+alistprime(end)))^2 );
%%% The tangential force per length Pt
Pt(i) = 0.5*Rho*(v_rel(i)^2)*Chord(i)*Ct;
end
for i=8:length(Pt)-1
Ai(i) = (Pt(i+1)-Pt(i) ) / (r(i+1)-r(i));
Bi(i) = ((Pt(i)*r(i+1))-(Pt(i+1)*r(i)) ) / (r(i+1)-r(i));
Pt_total(i) = Ai(i)*r(i)+Bi(i);
end
for i=8:length(Pt)-1
M(i) = ((1/3)*Ai(i)*((r(i+1)^3)-(r(i)^3))) + ((0.5)*Bi(i)*((r(i+1)^2)-(r(i)^2)));
end
% % total shaft torque and power
MTotal(j) = B* sum(M);
Power(j)=MTotal(j)*w*1e-3;
if k==3
TorqueBaseline=MTotal;
end
end
if k==3
figure(1)
hold on
leg = sprintf(' Baseline ');
plot(Velocity,MTotal,'-oblack','LineWidth',1.5, 'displayname', leg); grid on
end
if k>3
figure(1)
hold on
leg = sprintf('config %g',nc(iter)-1);
% plot(Velocity,MTotal, 'displayname', leg); grid on
plot(Velocity,MTotal,[my_markers(k) '-'], 'displayname', leg); grid on
xlabel(' Wind Speed (m/s) '); ylabel(' Torque (Nm) ');
set(gca,'XTick',(4:1:20)); set(gca,'YTick',(0:300:1800))
ylim([0 1800]); xlim([4 20]);
end
if k==33
figure(1)
hold on
leg = sprintf('Experimental upper range ');
plot(vupper,torqueupper,'-or','LineWidth',1.5, 'displayname', leg)
figure(1)
hold on
leg = sprintf('Experimental lower range ');
plot(vlower,torquelower,'-or','LineWidth',1.5,'displayname', leg)
end
for i =1
if Aoa(i)>-19
title(' Reynolds number = 500.000' )
else
title(' Reynolds number = 1.000.000' )
end
end
end
legend show

Sulaymon Eshkabilov
Sulaymon Eshkabilov 2022년 1월 1일
편집: Cris LaPierre 2022년 1월 1일
There are a few different ways to do that. But before jumping to the plot options, in your code some of the loops can be eliminated to enahce the computation time, e.g.:
This loop:
for i=8:length(Pt)-1
Ai(i) = (Pt(i+1)-Pt(i) ) / (r(i+1)-r(i));
Bi(i) = ((Pt(i)*r(i+1))-(Pt(i+1)*r(i)) ) / (r(i+1)-r(i));
Pt_total(i) = Ai(i)*r(i)+Bi(i);
end
for i=8:length(Pt)-1
M(i) = ((1/3)*Ai(i)*((r(i+1)^3)-(r(i)^3))) + ((0.5)*Bi(i)*((r(i+1)^2)-(r(i)^2)));
end
Can be substituted with:
N = length(Pt);
Ai = diff(Pt(8:N))./(diff(r(8:N).'));
Bi = ((Pt(8:N-1).*(r(9:N).'))-(Pt(9:N).*(r(8:N-1).')))./(diff(r(8:N).'));
Pt_total = Ai.*(r(8:N-1).')+Bi;
M = ((1/3)*Ai.*((r(9:N).^3).'-(r(8:N-1).^3).')) + ((0.5)*Bi.*((r(9:N).^2).'-(r(8:N-1).^2).'));
Now, how to get nice looking legends and here is the complete code:
close all; clearvars; clc
%%% Fixed Parameters
B = 2; % Number of Blades
R = 10.06; % Blade Radius in meter
Rho = 1.225; % Density of air kg/m3
w = 7.501; % Rotational Speed rad/s
Theta_P = -3; % Tip Pitch Angle in degree
ac = 0.2; % Glauert correction
eps = 1e-5; % Error tolerance
nc=1:1:16; % number of configurations for effect off different distribution
%%% Airfoil Date
afoil = readmatrix('airfoil data5e5.xlsx');
Aoa = afoil(:,1);
Cl = afoil(:,2);
Cd = afoil(:,3);
Velocity =[5,6,7,8,9,11]; % Wind Speed m/s
MTotal=[];
%%% Torque vs Velocity Data
torquee = readmatrix('TorqueWindSpeedExperi.xlsx');
vupper=torquee(1:5,1); % Radial Distance in meter
vlower=torquee(6:10,1); % Chord length in meter
torquelower=torquee(1:5,2); % Twist in degree
torqueupper=torquee(6:10,2);
%%% Given Blade Data
sections = readmatrix('chord and twist 15 distributions.xlsx');
iter=0;
for k=3:2:33
iter=iter+1; % used in legends in plots
r=sections(1:26,2); % Radial Distance in meter
SS=sections(1:26,3); % Span Station %
Chord=sections(1:26,k+1); % Chord length in meter
Beta=sections(1:26,k+2); % Twist in degree
for j=1:length(Velocity)
for i = 8:length(r)
sigma(i) = (B*Chord(i))/(2*pi*r(i));
a=0;
a_prime=0;
alist(i)=[0];
alistprime(i)=[0];
for n=1:1000
Phi = atand(((1-a)*Velocity(j))/((1+a_prime)*w*r(i))); % Flow Angle
Theta = Beta(i) + Theta_P ;
aoa = Phi- Theta; % local angle of attack in degree
f = (B/2)* ((R-r(i))/(r(i)*sind(Phi)));
F = (2/pi)*acos(exp(-f)); % Prandtl correction factor
cl=interp1(Aoa,Cl,aoa,'linear','extrap');
cd=interp1(Aoa,Cd,aoa,'linear','extrap');
Cn = cl*cosd(Phi)+cd*sind(Phi);
Ct =cl*sind(Phi)-cd*cosd(Phi);
K=(4*F*(sind(Phi))^2)/(sigma(i)*Cn);
%%%%%%%%%% a and ac condition
a = 1/(((4*F*(sind(Phi)^2))/(sigma(i)*Cn))+1);
if a < ac || a==ac
a=a;
else
a = 0.5*(2+K*(1-2*ac)-sqrt(((K*(1-2*ac)+2)^2)+4*((K*(ac^2))-1)));
end
a_prime =1/(((4*F*(sind(Phi)*cosd(Phi)))/(sigma(i)*Ct))-1);
alist(i,n+1)=a;
alistprime(i,n+1)=a_prime;
%%% condition for epsilon or tolerance
if a-alist(i,n) < eps && a_prime-alistprime(i,n) < eps
break;
end
end
%%% V relative
v_rel(i) = sqrt( (Velocity(j)*(1-alist(end)))^2 + (w*r(i)*(1+alistprime(end)))^2 );
%%% The tangential force per length Pt
Pt(i) = 0.5*Rho*(v_rel(i)^2)*Chord(i)*Ct;
end
N = length(Pt);
Ai = diff(Pt(8:N))./(diff(r(8:N).'));
Bi = ((Pt(8:N-1).*(r(9:N).'))-(Pt(9:N).*(r(8:N-1).')))./(diff(r(8:N).'));
Pt_total = Ai.*(r(8:N-1).')+Bi;
M = ((1/3)*Ai.*((r(9:N).^3).'-(r(8:N-1).^3).')) + ((0.5)*Bi.*((r(9:N).^2).'-(r(8:N-1).^2).'));
% % total shaft torque and power
MTotal(j) = B* sum(M);
Power(j)=MTotal(j)*w*1e-3;
if k==3
TorqueBaseline=MTotal;
end
end
if k==3
figure(1)
hold on
leg = sprintf(' Baseline ');
plot(Velocity,MTotal,'-oblack','LineWidth',1.5, 'displayname', leg); grid on
end
CC = 'rgbmkcgbgmcmrgbkm'; % Color Selection for lines and markerfaces
LL = '-:--'; % Line Type
MM = 'odphs<>^'; % Marker Type
if k>3
leg = sprintf('config %g',nc(iter)-1);
Ls=randi(numel(LL),1); % Random selection of Line Type
Ms=randi(numel(MM),1); % Random selection of Marker Type
CLs=randi(numel(CC),1); % Random selection of Line Color
CMs=randi(numel(CC),1); % Random selection of Marker Face Color
LMC =[CC(CLs) LL(Ls) MM(Ms)];
plot(Velocity,MTotal, LMC, 'markerfacecolor', CC(CMs), 'displayname', leg); grid on
xlabel(' Wind Speed (m/s) '); ylabel(' Torque (Nm) ');
set(gca,'XTick',(4:1:20)); set(gca,'YTick',(0:300:1800))
ylim([0 1800]); xlim([4 20]);
end
if k==33
leg = sprintf('Experimental upper range ');
plot(vupper,torqueupper,'-or','LineWidth',1.5, 'displayname', leg)
leg = sprintf('Experimental lower range ');
plot(vlower,torquelower,'-or','LineWidth',1.5,'displayname', leg)
end
for i =1
if Aoa(i)>-19
title(' Reynolds number = 500.000' )
else
title(' Reynolds number = 1.000.000' )
end
end
end
legend show
  댓글 수: 3
mehmet salihi
mehmet salihi 2022년 1월 1일
I really like to thank you for your help and showing me the best ways to code better taking into account the computation time.
I appreciate it really.
In addition, the way for legends are perfect.
once more time thank you my friend.
Sulaymon Eshkabilov
Sulaymon Eshkabilov 2022년 1월 2일
편집: Sulaymon Eshkabilov 2022년 1월 2일
Most welcome! Glad to be of some help.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 2-D and 3-D Plots에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by