MATLAB Answers

Assigning Specific Color Values when MATLAB plots several data sets simultaneously.

1 view (last 30 days)
I am having trouble trying to figure out how to change the color of my plots when I am plotting a 2D array of y-values, along with t-values....
The context of the problem is this: I am plotting PREDATOR vs. PREY relations in nature, and thus at each time value t, there are two y-values, one for the predators, and one for the prey. In previous plots, I could change the color of each line to a particular RGB calue (making very beautiful plots), but only because the plot function was fun once for each plot created. (and then the 'hold on;' function was used).... This time however, the two sets are plotted at the same time, so using ->
plot(t,y,'color',k');
will result in "both" plots becoming black. Otherwise, the default colors are used. I am sure there is a way to change this. Any suggestions? I have included my code below. The functions use a 2nd-order Runge Kutta Approximation for ODE's and two differential equations if that helps... Thank you in advance!
%% MAIN SCRIPT - Numerical Method; System of Linear 1rst Order ODE's.
% This is a demo fucntion to act as a resource for the solving of systems
% of 1rst order ODE's. This particular example is a linear fox and rabbit
% populations as the PREDATOR vs. PREY model developed by Lotka and
% Volterra.
close all;
clear all;
clc;
%MAIN SCRIPT
a=1; b=0.5; c=0.75; d=0.25; h=0.05;
R0=2; F0=1; tspan=[0 30];
[t,y]=RK2(@(t,y) FR(t,y,a,b,c,d), tspan, [R0 F0],h);
plot(t,y, 'Linewidth', 1.8)
%% Function Scripts
% Here we will define the ODE and Runge-Kutta Scripts to calculate our t,y
% values.
%ODE Definition Function
function yp = FR(t,y,a,b,c,d)
yp(1) = a*y(1)-b*y(1)*y(2);
yp(2) = -c*y(2)+d*y(1)*y(2);
end
%Runge-Kutta 2nd Order Accuracy Function
function [t,y] = RK2(f,tspan,y0,h)
t = tspan(1):h:tspan(2);
y(1,:)=y0;
for n=1:length(t)-1
k1=f(t(n),y(n,:));
k2=f(t(n)+h,y(n,:)+h*k1);
y(n+1,:)=y(n,:) + 0.5*h*(k1+k2);
end
end

Accepted Answer

Mehmed Saad
Mehmed Saad on 13 May 2020
Set ColorOrder of axes. Currently i am setting it to random, You can select your custom color
close all;
clear all;
clc;
%MAIN SCRIPT
a=1; b=0.5; c=0.75; d=0.25; h=0.05;
R0=2; F0=1; tspan=[0 30];
[t,y]=RK2(@(t,y) FR(t,y,a,b,c,d), tspan, [R0 F0],h);
%
ax = gca;
ax.ColorOrder = rand(10,3);hold on
plot(t,y, 'Linewidth', 1.8)
  1 Comment
Michael McDermott
Michael McDermott on 13 May 2020
Thank you!
I figured out how to set the 'gca' with an array of RGB values.
ax = gca;
ax.ColorOrder = 1/255*[[51 61 62]; 2.2*[51 61 62]; 3.6*[51 61 62]]
Here the 2.2 and 3.6 multipliers just adjust the "shade" of the original color. Thank you again for the help!

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!