How to change the colors of the plotted lines in for loop?

2 ビュー (過去 30 日間)
Wiqas Ahmad
Wiqas Ahmad 2021 年 5 月 11 日
コメント済み: DGM 2021 年 5 月 11 日
close all;
clear all;
clc;
%% ------------------------------Program-------------------------------------
z=2860:11:3135;
FOV=[1 2];
col=['r' 'b'];
[m,~]=size(FOV);
lineHandles = gobjects(1,m);
for i=1:length(FOV)
figure(1),
hold on
I0= getsignal(['FOV_',num2str(FOV(i)),'mrad\out_resultsG_I0.dat']);
Q0= getsignal(['FOV_',num2str(FOV(i)),'mrad\out_resultsG_Q0.dat']);
I= sum(I0,2);
Q= sum(Q0,2);
dep(i,:)= (I-Q)./(I+Q);
lineHandles(i)= plot(dep,z,'color',col(i,:),'LineWidth',1.5);
end
%plot(dep,z,'LineWidth',1.5);
legend('FOV_{in}','FOV_{out}','location','Southeast')
xlabel('Depolarization ratio \delta');
ylabel('\fontname{Arial}Cloud depth (m)');
set(gca,'color','w','Fontsize',12,'LineWidth',1,'Fontweight','normal');
set(gca,'box','off','Fontname','Arial','Fontsmoothing','on');
set(gca,'xlim',[0 1.4],'xtick',[0:0.2:1.4],'ylim',[2850 3150],'ytick',[2850:60:3150]);
set(gca,'xgrid','on','ygrid','on','gridcolor','k')
figure (2),
hold on
depr=(dep(1,:)./dep(2,:));
plot(depr,z,'b','LineWidth',1.5);
xlabel('Depolarization ratio \delta_{rat}');
ylabel('\fontname{Arial}Cloud depth (m)');
set(gca,'color','w','Fontsize',12,'LineWidth',1,'Fontweight','normal');
set(gca,'box','off','Fontname','Arial','Fontsmoothing','on');
set(gca,'xlim',[0 1.6],'xtick',[0:0.2:1.6],'ylim',[2850 3150],'ytick',[2850:60:3150]);
set(gca,'xgrid','on','ygrid','on','gridcolor','k')
This is my program which gives the following output figure:
I am trying to change the color of these curves using the lineHandles as:
lineHandles(i)= plot(dep,z,'color',col(i,:),'LineWidth',1.5);
However it displays the following error:
  2 件のコメント
Wiqas Ahmad
Wiqas Ahmad 2021 年 5 月 11 日
I have tried both none of them works

サインインしてコメントする。

回答 (1 件)

DGM
DGM 2021 年 5 月 11 日
編集済み: DGM 2021 年 5 月 11 日
You're flirting with disaster by doing this:
col=['r' 'b']; % this is literally 'rb'
As KSSV mentions, your first indexing operation selects the entire char vector 'rb', which isn't a valid color. Even if you selected only one element at a time, there are weaknesses. If you decided to change your linespec value to something other than a single character
col=['r:' 'b'];
You wouldn't get what you expect, because ':' isn't a valid color.
Instead of concatenating your linespec values into one char array, use a cell array (could also use an array of strings if your version supports it)
col = {'r','b'};
This would allow you to specify the full linespec (both linetype and color) using col.
lineHandles(i)= plot(dep,z,col{i},'LineWidth',1.5);
It might not be something you need for this one plot, but it's a safer and (at least I think so) more convenient way to do it.
On the other hand, if you wanted to specify the color independent of the linetype and were using an RGB color table, sure.
col = [0.004359 0.2834 0.2834;
0.3257 0.2739 0.8057;
0.959 0.2104 0.7873;
0.92 0.5704 0.3518;
0.7345 0.881 0.5547];
% ...
lineHandles(i)= plot(dep,z,'color',col(i,:),'linestyle',':','LineWidth',1.5);
  2 件のコメント
DGM
DGM 2021 年 5 月 11 日
First things first, just remove the option from the plot routine and make sure it works. I had to modify it in order for it to work properly:
lineHandles(i)= plot(dep(i,:),z,'LineWidth',1.5);
Then, once the thing plots, debug further based on the approach you're using for color assignment.
I refer to three different approaches:
1:Single-element indexing in a character vector:
col=['r' 'b'];
% ...
lineHandles(i)= plot(dep(i,:),z,'color',col(i),'linestyle',':','LineWidth',1.5);
In this case, see what the value is for
col(i)
2: Using a cell array of chars
col = {'r','b'};
% ...
lineHandles(i)= plot(dep(i,:),z,col{i},'LineWidth',1.5);
In this case, see what the value is for
col{i}
3: indexing through rows of a color table
col = [0.004359 0.2834 0.2834;
0.3257 0.2739 0.8057];
% ...
lineHandles(i)= plot(dep(i,:),z,'color',col(i,:),'LineWidth',1.5);
In this case, see what the value is for
col(i,:)
For assurances, this is the test code:
z=2860:11:3135;
FOV=[1 2];
col = {'r','b:'};
[m,~]=size(FOV);
lineHandles = gobjects(1,m);
for i=1:length(FOV)
figure(1),
hold on
I0= rand(numel(z));
Q0= rand(numel(z));
I= sum(I0,2);
Q= sum(Q0,2);
dep(i,:)= (I-Q)./(I+Q);
lineHandles(i)= plot(dep(i,:),z,col{i},'LineWidth',1.5);
end

サインインしてコメントする。

Community Treasure Hunt

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

Start Hunting!

Translated by