Plot a drawn, filled shape at each data point
5 views (last 30 days)
Show older comments
I have a matrix which contains X & Y data for seperate, single point locations to be plotted on a map using a marker for each point (kind of like multiple 'X marks the spot' on a map)
This works well until I scale the figure window & then the markers become a lot smaller than the data they represent.
How would I plot a filled unit square centred on each data point e.g. if the first point to be plotted is at (50, 10) I would like to draw a square (49.5, 9.5) (50.5, 9.5) (50.5, 10.5) (49.5, 10.5) & fil the square in a particular colour?
0 Comments
Answers (3)
dpb
on 21 Mar 2019
Edited: dpb
on 21 Mar 2019
S=1; % Side size
X=50; Y=10; % location
hR=rectangle('Position',[X-S/2,Y-S/2,S,S],'FaceColor','k');
xlim([X-5*S X+5*S]), ylim([Y-5*S Y+5*S])
hAx=gca;
grid on
2 Comments
dpb
on 21 Mar 2019
doc arrayfun
with anonymous function...
arrayfun(@(x,y) rectangle('Position',[x-S/2,y-S/2,S,S],'FaceColor'),'k',X,Y)
S is value set before definition.
Kelly Kearney
on 21 Mar 2019
A single multi-faceted patch will render more quickly than lots of individual rectangles. And this option allows your marker to be any arbitrary shape:
X = [10 20 30]
Y = [15 10 5]
xsquare = [0 0 1 1 0]';
ysquare = [0 1 1 0 0]';
hrect = patch(X+xsquare, Y+ysquare, 'k')
2 Comments
Star Strider
on 22 Mar 2019
If you’re using R2016a or earlier (so do not have ‘automatic implicit expansion’) you need slightly different code:
Xxsq = bsxfun(@plus, X, xsquare)
Yysq = bsxfun(@plus, Y, ysquare)
hrect = patch(Xxsq, Yysq, 'k')
See Also
Categories
Find more on Surface and Mesh Plots 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!