# Plot a drawn, filled shape at each data point

14 vues (au cours des 30 derniers jours)
DrEamonn le 21 Mar 2019
Commenté : Star Strider le 22 Mar 2019
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 commentairesAfficher -2 commentaires plus anciensMasquer -2 commentaires plus anciens

Connectez-vous pour commenter.

### Réponses (3)

dpb le 21 Mar 2019
Modifié(e) : dpb le 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 commentairesAfficher AucuneMasquer Aucune
DrEamonn le 21 Mar 2019
Solution is almost there, but position vectors have multiple values i.e.
X = [10 20 30]
Y = [15 10 5]
I have tried creating the w & h elements as w = ones(size(X)) & passing the rectangle function
rectangle( X, Y, w, h)
dpb le 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.

Connectez-vous pour commenter.

DrEamonn le 21 Mar 2019
rectangles function appears to do what I need
https://uk.mathworks.com/matlabcentral/fileexchange/59243-rectangles
##### 0 commentairesAfficher -2 commentaires plus anciensMasquer -2 commentaires plus anciens

Connectez-vous pour commenter.

Kelly Kearney le 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 commentairesAfficher AucuneMasquer Aucune
DrEamonn le 22 Mar 2019
Hi Kelly
I can see what you are suggesting to do, but I can't get it to work. Running your code gives me
Error using +
Matrix dimensions must agree.
Star Strider le 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')

Connectez-vous pour commenter.

### Catégories

En savoir plus sur Startup and Shutdown dans Help Center et File Exchange

### Community Treasure Hunt

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

Start Hunting!

Translated by