# How can I plot this figure?

1 view (last 30 days)
SM on 11 Apr 2022
Answered: Voss on 16 Apr 2022
X=[1,2,3,4,5,6,7,8,9,10]
Y=['d=1','d=3','d=2','d=2','d=3','d=1','d=2','d=2','d=1','d=3']
The outcome will be similar to this figure.
SM on 16 Apr 2022
I have used the following codes to plot:
Face(1).Colours=[0 0 0]; Face(2).Colours=[0.8500 0.3250 0.0980]; Face(3).Colours=[0.9290 0.6940 0.1250];
Y1=[1,0,0,0,1,0,0,0,1,0]; %d=1 (worker 1)
Y2=[0,0,1,1,0,0,1,1,0,0]; %d=2 (worker 2)
Y3=[0,1,0,0,0,1,0,0,0,1]; %d=3 (worker 3)
Days=10;
i=1;
while i<=Days
if Y1(i)==1
rectangle('Position',[(i-0.5) 0 1 1],'FaceColor',Face(1).Colours,'EdgeColor',Face(1).Colours,'LineWidth',0.5)
axis([0 Days 0 1])
elseif Y2(i)==1
rectangle('Position',[(i-0.5) 0 1 1],'FaceColor',Face(2).Colours,'EdgeColor',Face(2).Colours,'LineWidth',0.5)
axis([0 Days 0 1])
elseif Y3(i)==1
rectangle('Position',[(i-0.5) 0 1 1],'FaceColor',Face(3).Colours,'EdgeColor',Face(3).Colours,'LineWidth',0.5)
axis([0 Days 0 1])
end
i=i+1;
end
The obtained figure is:
To illsutrate, working days={1, 5, 9} have black bar as worker 1 performed duty in those days. Other days can also be exlained accordingly. Now my question is: (1) how can i insert legend for Y1, Y2 and Y3?; (2) Is there any simple and shortcut way to draw it?
Thanks

Voss on 16 Apr 2022
You could use create patch objects instead of rectangle objects, and then make a legend from (some of) those patches.
Or you can create patch objects with NaN data (so they don't appear in the axes) in addition to the rectangle objects you already have, one patch for each color, just to be used for the legend:
Face(1).Colours=[0 0 0]; Face(2).Colours=[0.8500 0.3250 0.0980]; Face(3).Colours=[0.9290 0.6940 0.1250];
Y1=[1,0,0,0,1,0,0,0,1,0]; %d=1 (worker 1)
Y2=[0,0,1,1,0,0,1,1,0,0]; %d=2 (worker 2)
Y3=[0,1,0,0,0,1,0,0,0,1]; %d=3 (worker 3)
Days=10;
i=1;
while i<=Days
if Y1(i)==1
rectangle('Position',[(i-0.5) 0 1 1],'FaceColor',Face(1).Colours,'EdgeColor',Face(1).Colours,'LineWidth',0.5)
% axis([0 Days 0 1]);
elseif Y2(i)==1
rectangle('Position',[(i-0.5) 0 1 1],'FaceColor',Face(2).Colours,'EdgeColor',Face(2).Colours,'LineWidth',0.5)
% axis([0 Days 0 1]);
elseif Y3(i)==1
rectangle('Position',[(i-0.5) 0 1 1],'FaceColor',Face(3).Colours,'EdgeColor',Face(3).Colours,'LineWidth',0.5)
% axis([0 Days 0 1]);
end
i=i+1;
end
% (just set the axes limits once, and include the +/- 0.5)
axis([0.5 Days+0.5 0 1]);
% create three patches with NaN data, to be used for making the legend:
p = [patch(NaN,NaN,Face(1).Colours); patch(NaN,NaN,Face(2).Colours); patch(NaN,NaN,Face(3).Colours)];
% make a legend for those three patches
legend(p,{'Y1' 'Y2' 'Y3'}) % (call them what you like)

### Categories

Find more on Grid Lines, Tick Values, and Labels in Help Center and File Exchange

### Community Treasure Hunt

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

Start Hunting!