how to add grid to imagesc?

181 views (last 30 days)
Rabih Sokhen
Rabih Sokhen on 10 Jan 2022
Commented: Rabih Sokhen on 14 Jan 2022
clear all
clc
a=rand(20,50)
x=linspace(-1,1,20)
y=linspace(-1,1,50)
imagesc(x,x,a)
I would like to add grid only at the border of every pixel in a way wen I zoom in only the initial grid appear
can someone help me with this.
thank you in advance
  1 Comment
yanqi liu
yanqi liu on 11 Jan 2022
only at the border of every pixel
may be use meshgrid and mesh to plot over image

Sign in to comment.

Accepted Answer

DGM
DGM on 11 Jan 2022
It depends how you want to visualize the data. Tools like imshow() or imagesc() represent the data points at the center of each facet in the displayed image. Tools like pcolor() represent the data at the vertices. If the latter is what you intend, then just use pcolor() instead of imagesc().
If you actually want the matrix represented as an image, then you'll have to create the grid. One way would be to just overlay a mesh plot.
s = [4 5]; % [y x]
xrange = [-1 1]; % imagesc only needs the endpoints
yrange = [-1 1];
a = rand(s);
dx = diff(xrange)/(s(2)-1);
dy = diff(yrange)/(s(1)-1);
xg = linspace(xrange(1)-dx/2,xrange(2)+dx/2,s(2)+1);
yg = linspace(yrange(1)-dy/2,yrange(2)+dy/2,s(1)+1);
hi = imagesc(xrange,yrange,a); hold on
hm = mesh(xg,yg,zeros(s+1));
hm.FaceColor = 'none';
hm.EdgeColor = 'k';
You might try to do it by setting the grid properties of the axes, but you'll have to contend with the ticklabels if you do that.
As to how you make the added grid appear only at certain zoom levels, you'd have to create some sort of custom callback to do that. I'll leave that to someone else.
  8 Comments
Rabih Sokhen
Rabih Sokhen on 14 Jan 2022
thank you DGM, it works

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!