How do I change axes scale in a surface plot by a predefined factor?

Hello,
I have a surface plot -
on x axis - [0,1,2.... 15];
on y axis - [0,1,2,...50];
I'd like to change the axes scale by multiply these two vector by a factor (different one on each axis), for exmaple by 12.5578 and thus changing only the axes lables.
I'm familair with XtickLabel and YTickLabel but I think it's less applicatble, mainly becaue this factor is not round.
Real life example - for instance when you want to change reperesntation from pixles to real units without changing the data.
Any thoughts?

 採用された回答

その他の回答 (1 件)

Mischa Kim
Mischa Kim 2021 年 1 月 3 日

0 投票

Iron, if it just about changing the labels simply use xticklabels(). See the example below:
x = linspace(-10,10,200);
y = cos(x);
plot(x,y)
xticklocs = [-3*pi -2*pi -pi 0 pi 2*pi 3*pi];
xticks(xticklocs);
myfac = 10; % this would be your 12.5578
xticklabels(cellstr(num2str(xticklocs'*myfac)));

4 件のコメント

Iron1759
Iron1759 2021 年 1 月 5 日
Thank you, Mischa.
It did work; however, there is one pitall, the labels are in intervals of 'myfac' which are not round and not quite esthetic. There is probably a way to 'normalise' them and to circumvent the problem, I just need to think about it further :)
If you do have something on the top of your head, please share..
Thanks
Mischa Kim
Mischa Kim 2021 年 1 月 5 日
Understood. In this case just go the other way around. Decide where you want your tick labels (the nice numbers) and then divide (instead of multiplying) by myfac to get the xticklocs.
Iron1759
Iron1759 2021 年 1 月 9 日
I don't know if it's only me but I didn't quite get it.
xticklocs/yticklocs are both 1D arrays after 'conversion' from nanometers (that I want to present) to a different unit.
Then, I don't get a display of my surface (after I used meshgrid).
xticklabels(cellstr(num2str(x))); % 0:10:200
yticklabels(cellstr(num2str(y))); % 0:10:200
Multi_x = multiplier_x; % = ~11.93
Multi_y = multiplier_y; % = ~ 3.98
xticklocs = x./Multi_x;
yticklocs = y./Multi_y;
xticks(xticklocs);
yticks(yticklocs);
Mischa Kim
Mischa Kim 2021 年 1 月 10 日
See this example:
x = linspace(-10,10,200);
y = cos(x);
figure(1)
plot(x,y)
xticklocs = [-3*pi -2*pi -pi 0 pi 2*pi 3*pi];
xticks(xticklocs);
figure(2)
plot(x,y)
xticklocs = -400:80:400; % these are the nice numbers
myfac = 400/(3*pi);
xticklabels(cellstr(num2str(xticklocs.')));
xticks(xticklocs/myfac);
If this does not help, share your code so I can provide specific input.

サインインしてコメントする。

カテゴリ

質問済み:

2021 年 1 月 3 日

回答済み:

2021 年 1 月 14 日

Community Treasure Hunt

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

Start Hunting!

Translated by