加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

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对数尺度下的图象如下:

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有