Filter löschen
Filter löschen

Matlab : put transparancy on a bar plot

265 Ansichten (letzte 30 Tage)
Sarah Guiffray
Sarah Guiffray am 28 Apr. 2015
Kommentiert: Qin Liang am 6 Mär. 2017
Hello, I have 2 different bar plot on a graph and I would like to put transparancy in order to see all the data even if my curves overlap. I try this code :
b1 = bar(x1,y1);%,'FaceColor',[0.2,0.2,0.5]);
set(get(b1,'Children'),'FaceAlpha',0.3)
hold on
b2 = bar(x1,y1,'FaceColor',[0,0.7,0.7]);
set(get(b2,'Children'),'FaceAlpha',0.2)
But it doesn't work. Also, I would like to calculate the probability of data which are in common between the 2 courb.
Thanks in advance,
Best regards
  1 Kommentar
pfb
pfb am 28 Apr. 2015
what do you exactly mean "it does not work"?
I'm asking because in my case it "sort of works". The bars do become transparent. Only, when they overlap, they produce a different color depending on which one is on top.
I see that you plot y1 vs x1 in both of your plots... But probably you re-define those between the two plots...

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Brendan Hamm
Brendan Hamm am 28 Apr. 2015
A) The bar series will only have a 0x0 GraphicsPlaceholder as a child (so no properties for the bars Children) B) The barseries does not have a property FaceAlpha (as it is not using the Patch object).
I would suggest a different course of action, and this will depend on the version you are using. We can use x1 and y1 to get back the relative number of counts in each bin.
vals = repelem(x1,y1); % Repeats element of x1(i), y1(i) times (for each i)
In versions >= 2014b we can use this to create a histogram, which will have a Face alpha:
h = histogram(vals);
h.FaceAlpha = 0.2;
Prior versions require us to use hist.
hist(vals,x1) % Hist does not return a handle, but creates an axes with a child of type Patch
patch1 = findobj(gca,'type','Patch'); % The child object of axes is a Patch Object
set(patch1,'FaceAlpha',0.2);
  6 Kommentare
Sarah Guiffray
Sarah Guiffray am 6 Mai 2015
Thank you very much ! The last question : how can I put a legend for each patch ? beacause, when I put a legend, I have p1 and p2 in the same color ...
Brendan Hamm
Brendan Hamm am 7 Mai 2015
Ok, I made some minor changes.
1. The ptchs return variable is now an array of patches
2. There is a second output ptchGrp which contains an hggroup, which is the way you can group multiple plot objects together. You will need this to change the legend values.
x1 = [-5 -4 -1 3 4 5 6 7 10];
y1 = rand(size(x1));
y1 = y1/sum(y1);
[p1,g1] = createPatches(x1,y1,0.4,'r',0.4);
y2 = rand(size(x1));
y2 = y2/sum(y2);
[p2,g2] = createPatches(x1,y2,0.4,'b',0.4);
Use the hggroup for creating the legend and get second output:
[leg,legIcon] = legend([g1 g2],'Y1','Y2');
legIcon contains the patch objects of the legend
legPatch = findobj(legIcon,'type','patch');
Set the FaceAlpha for the legend's patches:
legPatch(1).FaceAlpha = p1(1).FaceAlpha;
legPatch(2).FaceAlpha = p2(2).FaceAlpha;

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

Juan Ignacio Bravo Pérez-Villar
Bearbeitet: Juan Ignacio Bravo Pérez-Villar am 18 Mai 2016
Hello, I found a simpler way to do it that works for me on Matlab 2015b
b1 = bar(x1,y1,'r');
b1.FaceAlpha = 0.5;
hold on
b2 = bar(x2,y2,'FaceColor',[0,0.7,0.7]);
b2.FaceAlpha = 0.5;
Hope its useful for somebody.
Regards,
  1 Kommentar
Qin Liang
Qin Liang am 6 Mär. 2017
Works properly and simple on Matlab 2016B

Melden Sie sich an, um zu kommentieren.


Chad Greene
Chad Greene am 3 Mai 2015
This works find for me in 2012b:
x1 = [-5 -4 -1 3 4 5 6 7 10];
y1 = rand(size(x1));
b1 = bar(x1,y1);%,'FaceColor',[0.2,0.2,0.5]); %RXLEV
set(get(b1,'Children'),'FaceAlpha',0.3)
hold on
b2 = bar(x1,y1,'FaceColor',[0,0.7,0.7]);
set(get(b2,'Children'),'FaceAlpha',0.2)
If it's not properly transparent, try
set(gcf,'renderer','opengl')
  1 Kommentar
Sarah Guiffray
Sarah Guiffray am 5 Mai 2015
Bearbeitet: Sarah Guiffray am 5 Mai 2015
I do the same but it does not work .. I do not know why. (I have the version R2014b)

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Specifying Target for Graphics Output finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by