How can I plot a bode diagram with random color?
    12 views (last 30 days)
  
       Show older comments
    
What should I add to this code to have a random color?
sys=tf(1,[1 1])
bode(sys)
1 Comment
  Paulo Silva
      
 on 21 Jun 2011
				Please always provide detailed questions so we can help you better and faster
Accepted Answer
  Paulo Silva
      
 on 21 Jun 2011
        Another strange question from sadel, I never seen someone doing so many strange things but it's all good, here's a variation from Chirag Gupta code:
sys=tf(1,[1 1]);
ColList='ymcrgbk'; %no w letter because you won't see the white line 
col=randi([1 7]);
bode(sys,ColList(col))
10 Comments
  Paulo Silva
      
 on 21 Jun 2011
				function testbode
figure
pbh = uicontrol(gcf,'Style','pushbutton','String','Add another',...
 'Position',[10 20 60 40],...
 'callback',@newbode);
axes
hold all
 function newbode(obj,event)
 num=ones(1,randi([1,2]));
 den=ones(1,randi([3,6]));
 sys=tf(num,den)
 hold all
 sysn=evalc('sys')
 [a b] = strread(sysn, '%s %s', 'delimiter',char(10))
 num=char(a(2));
 den=char(a(3));
 linesep=char(b(2));
 set(sys,'Name',[num char(10) linesep char(10) den])
 bode(sys)
 legend('-DynamicLegend');
 end
end
More Answers (4)
  Chirag Gupta
    
 on 21 Jun 2011
           colors =['r','b','g','y','m','k'];
   c = ceil(6*(rand))
   bode(sys,colors(c))
This will pseudo randomly choose one of the 6 colors. You can obviously add more colors to the list!
1 Comment
  Chirag Gupta
    
 on 21 Jun 2011
				MATLAB figures default to a particular color. Unless you change that setting or change the colors via code, you will get the same color.
  Walter Roberson
      
      
 on 21 Jun 2011
        Provided that your systems are not MIMO,
sys=tf(1,[1 1]);
h = bodeplot(sys);   %notice this is _not_ bode()
for L = findobj(h,'type','line')
  set(L,'Color', rand(1,3));
end
Note: this does not attempt to match colors between the frequency and phase components. You did ask for random color...
I do not have the appropriate toolbox to probe to determine what would be needed to use the same color between the two halves when multiple systems are being drawn on the same plot, or when bode() is used to draw an array of bode plots for a MIMO system.
4 Comments
  Walter Roberson
      
      
 on 21 Jun 2011
				If you cannot have similar or duplicate colors, then the colors have not been chosen at random as requires by the original question ;-)
  Niels
 on 2 May 2013
        Here is a solution for giving bode plots a different color than and then 'ymcrgbk' and subsequently saving the figure without unwanted changes to the legend.
sys1=tf(1,[1 1]); sys2=tf(1,[1 1 1]);
figure; hold on;
bode(sys1,'b'); bode(sys2,'r');
h1 = findobj(gcf,'Color','b','-and','linestyle','-'); set(h1,'linewidth',1,'color',[.9 .9 .9]);
h2 = findobj(gcf,'Color','r','-and','linestyle','-'); set(h2,'linewidth',2,'color',[.5 .5 .5]);
legend([h1(1) h2(1)],'system 1','system 2')
It is important to assign the first term of the handle (e.g. h1(1)) in order to avoid issues with matrix dimentions (horzcat)
0 Comments
  Chirag Gupta
    
 on 21 Jun 2011
        bode(sys,'r')
You can always write some code to pick a random color from a set of colors that you would like
See Also
Categories
				Find more on Plot Customization in Help Center and File Exchange
			
	Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!