MATLAB Answers

0

Plotting discretized field in 2D

I have x,y Cartesian Coordinates and a value next to them that I would like to plot in color in the corresponding x,y.
xy = linspace(0,20,11);
x_y_value = [(combvec(xy,xy) )' rand(121,1)];
Here I would like to plot 2x2 squares at x,y (two first columns of x_y_value matrix) colored according to the value (third column of x_y_value matrix).
I am looking something like the attached image.
Thank you

  0 Comments

Sign in to comment.

1 Answer

Answer by Anton Semechko on 12 Jun 2018
 Accepted Answer

Here is an example:
x_lim=[0 20];
x=linspace(x_lim(1),x_lim(2),11);
[X,Y]=meshgrid(x);
F=randn(size(X)).*X-randn(size(X)).*Y;
figure('color','w')
imagesc(x_lim,x_lim,F)
axis equal
set(gca,'XLim',x_lim+[-1 01],'YLim',x_lim+[-1 1])

  6 Comments

Ok, here is yet another approach:
xy = linspace(0,20,11);
x_y_value = [(combvec(xy,xy) )' rand(121,1)];
N=size(x_y_value,1);
dx=xy(2)-xy(1);
C=(dx/2)*[-1 -1; 1 -1; 1 1; -1 1];
figure('color','w')
for i=1:N
Ci=bsxfun(@plus,C,x_y_value(i,1:2));
h=fill(Ci(:,1),Ci(:,2),x_y_value(i,3));
set(h,'EdgeColor','k')
hold on
end
axis equal
XLim=[min(x_y_value(:,1)) max(x_y_value(:,1))]+dx*[-1 1];
YLim=[min(x_y_value(:,2)) max(x_y_value(:,2))]+dx*[-1 1];
set(gca,'XLim',XLim,'YLim',YLim)
This is exactly what I was looking for! I have never came across bsxfun. Thank you again Anton!
You are welcome!

Sign in to comment.