How to make '.' Markers transparent in a Scatter plot?

135 views (last 30 days)
In R2016b, I am able to make Point ('.') Markers transparent in a Scatter plot by setting MarkerEdgeAlpha to a value < 1. For example:
%Generate 'n' random samples.
n = 10000;
x = randn(n,1);
y = randn(n,1);
%Plot.
figure
scatter(x, y, 'Marker', '.', 'MarkerEdgeAlpha', 0.5)
However in R2020b, it seems Point Markers can't be transparent. The same code produces:
Is there any way to make Point Markers transparent in a Scatter plot in R2020b, or was this feature deprecated? I'd rather use Point Markers than filled Circle Markers.

Accepted Answer

Zachary
Zachary on 26 Jan 2021
Here's the answer from the Technical Support Case:
The current workaround for this is to use the 'o' marker symbol and divide its size to make it a similar size to the '.' marker symbol. This can be done by adding the following line to the code you sent in:
h = scatter(x, y, 'Marker', 'o', 'MarkerEdgeAlpha', 0.5);
h.SizeData = h.SizeData/9;

More Answers (1)

Constantino Carlos Reyes-Aldasoro
Hello
Just tested this in R2019a and it works as for you, I have not yet upgraded to 2020.
Just an idea, try to grab the handle of the scatter plot
>> hs=scatter(x, y, 'Marker', '.');
Then you can investigate the properties of the handles directly, type hs. and then tab and a window with all the properties will appear, scroll down, in my case I found MarkerEdgeAlpha:
>> hs.MarkerEdgeAlpha
ans =
1
Which I could modify like this
>> hs.MarkerEdgeAlpha=0.5
hs =
Scatter with properties:
Marker: '.'
MarkerEdgeColor: 'flat'
MarkerFaceColor: 'none'
SizeData: 36
LineWidth: 0.5000
XData: [1×10000 double]
YData: [1×10000 double]
ZData: [1×0 double]
CData: [0 0.4470 0.7410]
Show all properties
>>
Perhaps you have to modify hs.MarkerFaceAlpha as well?
Hope that helps.
  2 Comments
Zachary
Zachary on 22 Jan 2021
Unfortunately, that doesn't seem to work. When I try...
%Generate 'n' random samples.
n = 10000;
x = randn(n,1);
y = randn(n,1);
%Plot.
figure
h = scatter(x, y, 'Marker', '.', 'MarkerEdgeAlpha', 0.5, 'MarkerFaceAlpha', 0.5);
get(h, {'MarkerEdgeAlpha' 'MarkerFaceAlpha'})
... I get...
ans =
1×2 cell array
{[0.5000]} {[0.5000]}
It looks like the object properties MarkerEdgeAlpha and MarkerFaceAlpha are correctly set, but when the Marker is '.' (Point), they don't apply.
Constantino Carlos Reyes-Aldasoro
Well, then it may be that this has been disabled, try changing to a circle marker of small size. Not the same as a point, but may be the second best.

Sign in to comment.

Categories

Find more on Graphics Object Properties in Help Center and File Exchange

Products


Release

R2020b

Community Treasure Hunt

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

Start Hunting!