File Exchange

image thumbnail

dropshadow - Drop Shadow class for plot objects

version (4.6 KB) by Maarten van der Seijs
Adds a dropshadow to plot objects.


Updated 12 Nov 2012

View License

Every now and then your crude and harsh Matlab plots can benefit from some graphical enhancements. This class adds a fully customisable dropshadow to the plot objects in your axes. It takes a "snapshot" of the current axes and renders a dropshadow image using 2D convolution with a Gaussian kernel. Still, the figure can be exported to a vector graphics format, making it ideal for printed reports or PDFs.

ShadowObj = dropshadow(hAxes) creates a dropshadow object for the plot objects in the specified axes. The shadow image is rendered using 2D convolution of a Gaussian kernel based on the properties Color, Angle, Distance, Spread and Size. The original plot objects are kept, such that the figure can still be exported to a vector graphics format such as EPS or PDF.

ShadowObj = dropshadow(hAxes,'Prop1',Value1,...) creates the dropshadow and sets the specified properties.

The dropshadow object is updated whenever a change is made to one of the properties. The object is deleted upon axes deletion.

Note that the shadow is always put as a 2D image in the background of the plot axes, regardless of 3D rotations.

Known issues:
The current implementation uses the java.awt.Robot to make a snapshot. This will not work with docked figures. A workaround is to use the built-in getframe function, which is activated by setting the hidden property ShadowObj.SnapMethod = 'getframe'. Suggestions for more robust implementations are welcome!

Cite As

Maarten van der Seijs (2021). dropshadow - Drop Shadow class for plot objects (, MATLAB Central File Exchange. Retrieved .

Comments and Ratings (7)

Paul Ackerman

Thanks for this submission. I had to update a few things but now it runs in R2018b.
1. assert(strcmp(get(h,'type'),'axes'),'Parent must be an axes handle.') % update assertion
2. obj.listeners.ObjectBeingDestroyed = listener(h, 'ObjectBeingDestroyed', @(~,~) delete(obj)); % update handle.listener to listener
3. rect = hgconvertunits(h.Parent,h.Position,h.Units,'pixels',h.Parent); % undocumented hgconvertunits requires a figure handle so I used h.Parent for the first argument
4. classdef (ConstructOnLoad = true) dropshadow < matlab.mixin.SetGet % for future compatibility


This is a great lightweight helper. I want to get a mesh to throw a shadow and I'm not winning. I see that there is a private function that does a drop shadow for a ShadowObj. Is this the right idea? how do I access it if so?

Janneke Snijder

Yes, I'm using the 2014b version. And thanks, I'll try it on an older version.

Maarten van der Seijs

Hi Janneke, I guess you are using Matlab version 2014b or newer? The function appears to be incompatible with the updated graphics system (HG2). I haven't been able to fix this; to use it I would suggest to use a Matlab version not newer than 2014a.

Janneke Snijder

I am trying to use the dropshadow effect, using the given example in the script. When I run it, I get the following error:

Error using dropshadow (line 86)
Parent must be an axes handle.

How can I fix this?


Great effect! Just make sure the 'units' of root are pixels before getting the monitor size.


MATLAB Release Compatibility
Created with R2012a
Compatible with any release
Platform Compatibility
Windows macOS Linux

Inspired by: getscreen

Community Treasure Hunt

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

Start Hunting!