# Add background color for some values in a plot of two two variables

6 views (last 30 days)

Show older comments

##### 1 Comment

### Answers (1)

Ben
on 14 Sep 2022

Edited: Ben
on 16 Sep 2022

You can plot a bar graph and then set the FaceAlpha to less than 1.

x = [0 1 2 2 3 4 4 6 7 7];

y = [1 2 2 3 4.5 4.5 6 7];

p = [2.15e-12 2.72e-11 2.397e-10 0.0600 5.613e-09 1.803e-08 4.831e-08...

8.945e-08 1.874e-07 2.894e-07];

plot(x,'b')

hold on;

plot(y, 'k')

ax = gca; %Get axis size info

ylimVals = ax.YLim; %Y limits

scaleFact = max(ylimVals);

b1 = bar(scaleFact*(p < 0.05),'b'); %plot blue bar graph

b1.FaceAlpha = 0.5; %Set transparency to 50%

b1.EdgeAlpha = 0; %Maybe you want no outline on the bar

ylim(ylimVals); %Set ylim correctly

uistack(b1, 'bottom') %Move background below other elements

##### 5 Comments

Ben
on 16 Sep 2022

I've edited my answer and tested the code locally with your data and think it does what you want.

I think the key understanding here is that you don't need to loop through p. MATLAB allows vector calculations, so you can check every cell in p at once.

out = p < 0.05;

Out will be a logical index (that is, 1 where p < 0.05, 0 otherwise) with the same length as p. You can then plot the logical index with a scaling factor to get the background at a consistent height.

### See Also

### Categories

### Community Treasure Hunt

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

Start Hunting!