Making a square figure with pcolor

9 Ansichten (letzte 30 Tage)
V.D-C
V.D-C am 12 Mär. 2020
Kommentiert: darova am 18 Mär. 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 Kommentare
darova
darova am 16 Mär. 2020
Can you attach your code? Data?
V.D-C
V.D-C am 17 Mär. 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 ?

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

darova
darova am 17 Mär. 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 Kommentare
V.D-C
V.D-C am 18 Mär. 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 am 18 Mär. 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

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

J. Alex Lee
J. Alex Lee am 17 Mär. 2020
Bearbeitet: J. Alex Lee am 17 Mär. 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 Kommentar
V.D-C
V.D-C am 17 Mär. 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.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Graphics Performance finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by