EdgeAlpha for bar plot

조회 수: 26 (최근 30일)
William De Doncker
William De Doncker 2020년 1월 24일
댓글: Nikhil Sonavane 2020년 1월 30일
Hi there,
I am trying to plot a horizontal line for the value (y) shown below across 3 different x values. Given that I had 2 groups, I tried to do this using the bar plot function and make the FaceColor transparent and then make the vertical and bottom edge transparent. Unfortunately, I cannot seem to figure out how to control individual Edges in bar plot. Seems to be possible in patch plots but not in bar plot. Any idea as to how I can go around this?
This is what I have done so far:
y = [5.14, 5.84;
4.80, 4.42;
5.16; 4.42]
b = bar(y);
b(1).FaceColor = [1 1 1];
b(2).FaceColor = [1 1 1];
b(1).EdgeColor = [0.4 0.4 0.4];
b(2).EdgeColor = [0.7 0.7 0.7];
b(1).LineWidth = 4;
b(2).LineWidth = 4;
b(1).FaceAlpha = 0;
b(2).FaceAlpha = 0;
How can I adjust the transparency of each individual edge of the bar plot?
Any help would be very much appreciated.
William De Doncker

답변 (1개)

Nikhil Sonavane
Nikhil Sonavane 2020년 1월 29일
편집: Nikhil Sonavane 2020년 1월 29일
The output of the mean function which you are using to calculate mean of matrix y is a vector, not a matrix. The function bar returns one or more Bar objects. If y is a vector, then bar creates one Bar object. If y is a matrix, then bar returns a Bar object for each series. In your case only one Bar object is created and hence you are not able to modify individual properties of each bar created in the bar graph. You can refer its documentation for more details. The following is one of the workaround solutions which you can leverage-
y = [5.14, 5.84;4.80, 4.42;5.16, 4.42];
mean_y=mean(y);
hb1 = bar(1,mean_y(1));
hold on
hb2 = bar(2,mean_y(2));
hb1.FaceColor=[1 0 1];
hb2.FaceColor=[0 1 0];
hb1.EdgeColor = [0.4 0.8 0.4];
hb2.EdgeColor = [0.4 0.4 0.4];
hb1.LineWidth = 4;
hb2.LineWidth = 6;
This will help you modify properties of the individual bars as two different bar objects are created.
  댓글 수: 2
William De Doncker
William De Doncker 2020년 1월 29일
Hi Nikhil,
Thank you for your answer. The variable name 'mean_y' was a mistake and have now modified this in the original question. I basically wanted to plot matrix 'y'. Also, your solution does not seem to answer the question. I can modify the FaceColor and EdgeColor, but what I wanted to know is whether you can modify the transparency of each edge using EdgeAlpha? I want to make the two vertical edges and the bottom horizontal edge of each bar transparent so that only the top hoirzontal edge is visible.
Here is what I wanted to achieve:
example.JPG
I managed to do get what I wanted using a far from ideal method, by overlaying a white bar over the orginal with a new y-axis value of y-(a number).
Cheers,
Will
Nikhil Sonavane
Nikhil Sonavane 2020년 1월 30일
Edge Propeties of a bar can be accessed by a single identifier. There are no separate identifiers for vertical and horizontal line of a bar. Transparency of all edges of a bar can be modified using EdgeAlpha and not individual edges separately.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Graphics Object Programming에 대해 자세히 알아보기

제품


릴리스

R2018a

Community Treasure Hunt

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

Start Hunting!

Translated by