Add background color for some values in a plot of two two variables
조회 수: 2 (최근 30일)
이전 댓글 표시
Hi everyone. I have two variables av1 and av2. Each variables have 114 data points. I want to draw it in same figure but at same time and point I also want to calculate p value from ttest between av1 and av2. So if the significance difference is less then 0.05 at that data point it should draw a background colour. I attached the figure.
댓글 수: 1
답변 (1개)
Ben
2022년 9월 14일
편집: Ben
2022년 9월 16일
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
Ben
2022년 9월 16일
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.
참고 항목
카테고리
Help Center 및 File Exchange에서 Line Plots에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!