Plots with different colors

1 Ansicht (letzte 30 Tage)
Yen Tien Yap
Yen Tien Yap am 25 Aug. 2021
Bearbeitet: Simon Chan am 25 Aug. 2021
Hi, I want to create the scatter plot with three different colours represents three different regions. I think something wrong with the for loop, can someone help me with that? Thank you.
rho=1000; %[kg/m3]
D=12.6*10^-3; %[m]
L=1.5; %[m]
miu=0.001; %[Pas]
g=9.81;
A=pi*D^2/4;
Q0=[1600,1500,1400,1300,1200,1100,1000,900,800,700,600,500,400,300,240,220,...
200,180,160,140,120,100,80,70,70,60,50,40,30,20,10];%[L/hr]
Q=Q0/(1000*3600);
%Wet-wet digital gauge
P_dpg=[20.1,17.5,15.7,13.1,11.6,9.3,8,6.5,5.3,4.1,3,2.1,1.3,0.8]; %[kPa]
%Inverted manometer
h=[6.9,5.9,5,4.1,3.2,2.6,1.8,1.3,0.7,0.5]; %[cm]
h_m=h/100;
P_mtr=rho*g*h_m;
%Capsuhelic gauge
P_cpg=[33,31,28,23,17,12,8];
P=[P_dpg.*1000,P_mtr,P_cpg];
V=Q/A;
Re=rho*V*D/miu;
f=P*D./(2*rho*L*V.^2);
X=Re(25:31);
Y=f(25:31);
p=polyfit(log(X),log(Y),1)
p = 1×2
-1.2271 4.1752
y=polyval(p,log(X));
figure(1)
for i=1:length(Re)
if Re(i) < 2*10^3
loglog(Re,f,'xb','LineWidth',1)
elseif Re(i)>=2*10^3 & Re(i)<=3*10^3
loglog(Re,f,'xr','LineWidth',1)
else
loglog(Re,f,'xg','LineWidth',1)
end
end
hold on
loglog(X,exp(y),'--r','LineWidth',1.5)
grid on
xlim([10^2 10^5])
ylim([0.001 0.1])
xlabel('Reynolds number Re')
ylabel('Friction factor f')
title('f vs Re')

Akzeptierte Antwort

Simon Chan
Simon Chan am 25 Aug. 2021
Put the index and hold on inside the loop
figure(1)
for i=1:length(Re)
if Re(i) < 2*10^3
loglog(Re(i),f(i),'xb','LineWidth',1)
hold on
elseif Re(i)>=2*10^3 & Re(i)<=3*10^3
loglog(Re(i),f(i),'xr','LineWidth',1)
hold on
else
loglog(Re(i),f(i),'xg','LineWidth',1)
hold on
end
end
  3 Kommentare
Yen Tien Yap
Yen Tien Yap am 25 Aug. 2021
I wanted to add legend to the figure but it ended up labelling the same colour. What can I do with this?
rho=1000; %[kg/m3]
D=12.6*10^-3; %[m]
L=1.5; %[m]
miu=0.001; %[Pas]
g=9.81;
A=pi*D^2/4;
Q0=[1600,1500,1400,1300,1200,1100,1000,900,800,700,600,500,400,300,240,220,...
200,180,160,140,120,100,80,70,70,60,50,40,30,20,10];%[L/hr]
Q=Q0/(1000*3600);
%Wet-wet digital gauge
P_dpg=[20.1,17.5,15.7,13.1,11.6,9.3,8,6.5,5.3,4.1,3,2.1,1.3,0.8]; %[kPa]
%Inverted manometer
h=[6.9,5.9,5,4.1,3.2,2.6,1.8,1.3,0.7,0.5]; %[cm]
h_m=h/100;
P_mtr=rho*g*h_m;
%Capsuhelic gauge
P_cpg=[33,31,28,23,17,12,8];
P=[P_dpg.*1000,P_mtr,P_cpg];
V=Q/A;
Re=rho*V*D/miu;
f=P*D./(2*rho*L*V.^2);
X=Re(25:31);
Y=f(25:31);
p=polyfit(log(X),log(Y),1)
p = 1×2
-1.2271 4.1752
y=polyval(p,log(X));
figure(1)
for i=1:length(Re)
if Re(i) < 2*10^3
loglog(Re(i),f(i),'xb','LineWidth',1)
hold on
elseif Re(i)>=2*10^3 & Re(i)<=3*10^3
loglog(Re(i),f(i),'xr','LineWidth',1)
hold on
else
loglog(Re(i),f(i),'xk','LineWidth',1)
hold on
end
end
loglog(X,exp(y),'--','LineWidth',1.5)
hold off
grid on
xlim([10^2 10^5])
ylim([0.001 0.1])
xlabel('Reynolds number Re')
ylabel('Friction factor f')
legend('Laminar Flow','Transitional zone','Turbulent Flow')
title('f vs Re')
Simon Chan
Simon Chan am 25 Aug. 2021
Bearbeitet: Simon Chan am 25 Aug. 2021
It is better to separate the data into 3 groups since the plot was performed point by points and hence there were actually 31 data and hence the legend above is showing the last 3 points only.
The code needs to be adjusted like the following:
figure(1)
Re_A = Re(Re < 2*10^3); % Group 1
f_A = f(Re < 2*10^3);
Re_B = Re(Re>=2*10^3 & Re<=3*10^3); % Group 2
f_B = f(Re>=2*10^3 & Re<=3*10^3);
Re_C = Re(Re > 3*10^3); % Group 3
f_C = f(Re > 3*10^3);
loglog(Re_A,f_A,'xb','LineWidth',1) % Plot Group 1 data
hold on % In this case, one hold on is enough
loglog(Re_B,f_B,'xr','LineWidth',1) % Plot Group 2 data
loglog(Re_C,f_C,'xg','LineWidth',1) % Plot Group 3 data
legend('Laminal flow', 'Transitional zone', 'Turbulent flow')

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by