Saving a Plot on a Figure with Transparency Ignores the Transparency
20 views (last 30 days)
Show older comments
Hello, I am trying to replicate some of Excels fancy plots in Matlab. In particular when I plot data, Im also plotting the same data but with a thicker line and transparency reduced to give the effect of "glow"
I use the Color 4th parameter for the this (the 1st 3 are RGB colour, and the 4th is the Alpha value)
i.e
p=plot(ax,xdata,ydata,'LineWidth',14,'Color',cl); % cl = a pre assigned colour
p.Color(4) = 0.11;
This is actually plotted on a UIAxes. I then copy this to a figure which allows me to save the "fancy" graph. However, Im noticing that transparency isn't saving.
Here is the graph copied to a figure - that I then save with the save button
But when I reopen that saved figure, as I said the transparency isn't saved.
Is there a way to get the graph saved exactly how it appears?
Thanks
Jason
0 Comments
Accepted Answer
Dave B
on 17 Apr 2023
Transparency for lines isn't supported, and so the alpha channel is lost when you save and load. A workaround is to use patch, which does support transparency.
However, one thing to watch out for with the 'thick line for glow' strategy is sharp turns, the line will overlap with itself making a little bright spot. You can see a few little overlaps in the sine wave, and some bigger ones in the sawtooth below. You could avoid this by actually making a region (e.g. using patch and FaceColor/FaceAlpha properties), but you'd need to compute how far to offset that region from the line in data co-ordinates...
x=linspace(0,2*pi,100);
y=sin(x);
clr = [.85 .325 .098];
plot(x,y,'Color',clr)
p=patch([x flip(x)],[y flip(y)],clr);
p.EdgeColor=clr;
p.FaceColor='none';
p.EdgeAlpha=.15;
p.LineWidth=7;
p.LineJoin='round'; % to make it similar to plot's default
ax=gca;
ax.Color=[.1 .1 .1];
ylim padded
figure
x=linspace(0,5*pi,11);
y=sin(x);
clf;hold on
clr = [.85 .325 .098];
plot(x,y,'Color',clr)
p=patch([x flip(x)],[y flip(y)],clr);
p.EdgeColor=clr;
p.FaceColor='none';
p.EdgeAlpha=.15;
p.LineWidth=7;
p.LineJoin='round';
ax=gca;
ax.Color=[.1 .1 .1];
ylim padded
2 Comments
Dave B
on 19 Apr 2023
I'm afraid I don't know the answer to that question, but I do know that it's been requested and that requests from users are very important to us!
More Answers (0)
See Also
Categories
Find more on Graphics Performance in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!