Matlab坐标轴比例问题
(2010-05-01 14:13:26)
标签:
matlab杂谈 |
用set(gca,'Xscale','log')只能是将X轴的尺度设置成以10为底的对数尺度.有没有办法设置成以任意大于0的实数为底数的对数尺度??更进一步的,带任意系数的任意大于0的实数为底数的对数尺度??即k*a,k*a^2,k*a^3,...,k*a^n.k为系数,a为任意大于0的实数.
用set(gca,'xTicklabel',string)设定后的x轴只是把坐标刻度名称改了,实际由于函数点没变,本质上函数图像还是原来的图像.故在改xTicklabel的同时需要重新把函数图像上的点真正对应到label的刻度上.plot(x,f(h(x)));实现
这一点.
以下是相应的m文件.
function xscalef(x,f,h)
%x轴任意坐标尺度下的图
%x:原始数据
%f:y关于x的函数句柄。h:x坐标尺度相应的函数句柄;
%例如:log尺度下,h=@(x)10.^x;
plot(x,f(h(x)));
set(gca,'xTicklabel',strcat(num2str(h(1)),'|',num2str(h(2)),'|',...
num2str(h(3)),'|',num2str(h(4)),'|',num2str(h(5)),'|',num2str(h(6)),'|',...
num2str(h(7)),'|',num2str(h(8))));
axis([1 8 0 h(9)]);
ps:这个函数基本可以画出连续函数y=f(x)在多种x轴坐标轴尺度下(线性,对数,指数等等给出相应尺度变换公式的)相应的图像.
对于散点图等,也可以类似的做.
例如: 执行
h=@(x)5*2.^x;
f=@(x)x;
xscalef(1:0.1:1000,f,h);
可以看到y=x的图象在1/5倍以2为底的log对数尺度下的图象如下:

加载中…