MATLAB Answers

Making a square figure with pcolor

10 views (last 30 days)
V.D-C
V.D-C on 12 Mar 2020
Commented: darova on 18 Mar 2020
Hello,
I have 2 matrices for x and y coordinates, and a matrix of temperatures. From the matrices, I make 2 coordinate vectors of size 99000 x 1 from the 300 x 300 matrices.
When I plot with imagesc and the vectors, I have the linked result. When I plot with pcolor and the coordinates matrices, I have the other figure.
I would like to make the second figure (plotted with pcolor) square like the one plotted with imagesc. How could I achieve that ?
Thanks in advance !

  4 Comments

Show 1 older comment
V.D-C
V.D-C on 16 Mar 2020
Ah sorry I didn't get the notification, and I thought I attached the figures. Here you go
darova
darova on 16 Mar 2020
Can you attach your code? Data?
V.D-C
V.D-C on 17 Mar 2020
Sorry again, I couldn't answer to your message earlier.
The code looks something like that :
%%% Pcolor
h = figure();
pcolor(x(50:250,50:250),y(50:250,50:250),Tair_mean(50:250,50:250));%% I frame the area of interest
shading flat
colorbar;
ylabel(colorbar,'Air Temprature [°C]');
title(['Mean Daily Air Temperature ' date]);
axis equal
set(gca, 'Color', 'none');
%%% Imagesc
% I transform my coordinates matrices in vectors in order to make them work with imagesc
x_vect = x(:);
y_vect = y(:);
h = figure();
imagesc(x_vect,y_vect,Tair_mean(50:250,50:250)) %% I frame the area of interest
How could I get a square figure like imagesc but with pcolor ?

Sign in to comment.

Accepted Answer

darova
darova on 17 Mar 2020
You can either use pcolor without X and Y vectors
newTair = flipud(Tair_mean(50:250,50:250)); % flip matrix upside-down
pcolor(newTair)
Or you can create rotate X and Y
a = 51;
R = [cosd(a) sind(a);-sind(a) cosd(a)];
V = R*[x(:) y(:)]';
x1 = reshape(V(1,:),size(x));
y1 = reshape(V(2,:),size(x));
pcolor(x1(50:250,50:250),y1(50:250,50:250),Tair_mean(50:250,50:250));%% I frame the area of interest

  5 Comments

Show 2 older comments
J. Alex Lee
J. Alex Lee on 17 Mar 2020
darova's code seems to work for me...
rather than axis tight, I think you want
set(gca,'DataAspectRatio',[1 1 1])
darova has already identified that you only need a rotation through 51deg to "rectify" your coordinates, so you woulnd't need to fiddle around with fitgeotrans().
V.D-C
V.D-C on 18 Mar 2020
I will test it as soon as my matlab works !
One question though, how did you do to find the rotation value ?
darova
darova on 18 Mar 2020
  • One question though, how did you do to find the rotation value ?
Good question. I used my eyes to calculate it. But maybe it's not the best way
dx = x(2) - x(1);
dy = y(2) - y(1);
a = 90 + atan2d(dy,dx)
a =
50.9309

Sign in to comment.

More Answers (1)

J. Alex Lee
J. Alex Lee on 17 Mar 2020
Edited: J. Alex Lee on 17 Mar 2020
Your coordinate grid matrices x and y are not "aligned" with the axes. You can see this if you just do
plot3(x,y,zeros(size(x)),'.k')
view(2)
So I would say your pcolor code is giving you the correct rendering, and imagesc behavior seems anomalous, since your values of x and y (called x_vect and y_vect in your code), do not follow the requirements of imagesc:
per the documentation, x and y should either be vectors of respective lengths size(Tair_mean), or 2-element vectors specifying only the corner coordinates (implicitly assume on a rectangular canvas aligned with axes), or scalars specifying only 1 corner. As you supply the entire grid in a long vector, it must be assuming you only care about the first and last points, or something like that.
If you want to align with axes, I guess you have 2 options:
  • Forget about the actual coordinate values and simply issue
pcolor(Tair_mean(50:250,50:250));

  1 Comment

V.D-C
V.D-C on 17 Mar 2020
Hello, thank you very much for your answer.
I think I will have to forget about the values because to transform my original grid I need a rotation matrix but also to take account of the deformation of the pixels because of the UTM conversion.
I will dig into the image processing toolbox though, as you suggested.

Sign in to comment.

Sign in to answer this question.


Translated by