« 上一篇: 用MATLAB画横向的条状图 下一篇: 用matlab画一个弯曲的圆柱 »
萝卜 @ 2008-02-06 08:08

程序思路:在一个大的axes上用text命令画标注文字,而在
一个小的axes上画图。

程序如下:

function LabelS(s,x,y,w,A);
% s is string
% x and y are the positions
% w is the width of every bar.
% A is the angle of string 
% Example:
%     s={'Monte-Calo','Cellular automation','Phase retrival'};
%     LabelS(s,1:3,rand(1,3),0.3,70);
%
close all;
A1=axes;
A2=axes('Position',[0.13 0.51 0.775 0.42]);
L=0;
for k=1:length(s);
    L=max(L,length(s(k)));
end
axes(A1);
set(gca,'Xlim',[0,length(x)+1],'Xtick',0:length(x));
for k=1:length(s);
    T=text(k,0.47,char(s(k)),'Rotation',A,'fontsize',16,...
        'HorizontalAlignment','right'); %change the value of rotation to rotate the labels
end
axis off;
axes(A2);
gridbar(x,y,w);
set(gca,'Xlim',[0,length(x)+1],'Xtick',0:length(x),...
    'Fontsize',14,'Xtick',[]);

function gridbar(x,y,w)
% x is the data at x-axis
% y is the data at y-axis
% w is the width of bar
%  Example:
%     gridbar(1:6,rand(1,6),0.4);
for k=1:length(x);
    xk=x(k);yk=y(k);
    plot([xk-w,xk-w,xk+w,xk+w],[0,yk,yk,0],'k');
    hold on;
end
xt=get(gca,'xtick');
yt=get(gca,'ytick');
Po=get(gca,'Position');
A=[yt(2)-yt(1)]/[xt(2)-xt(1)];
A=tan(A)*2;
yd=[xt(2)+w]*tan(A);
D=[yt(2)-yt(1)]/3;
xm=min(xt);ym=min(yt);
for k=1:length(x);
    xk=x(k);yk=y(k);
    ydt=-[xk+w]*tan(A)+D;
    while ydt<[yk-(xk-w)*tan(A)];
        xc=[ym-ydt]/tan(A);
        if xc<xk+w & xc>xk-w;
            x1=xc;y1=ym;
        else
            x1=xk-w;y1=(xk-w)*tan(A)+ydt;
        end
        xc=[yk-ydt]/tan(A);
        if xc<xk+w & xc>xk-w;
            x2=xc;y2=yk;
        else
            x2=xk+w;y2=(xk+w)*tan(A)+ydt;
        end
        plot([x1,x2],[y1,y2],'k');
        ydt=ydt+D;
    end
end
A=-A;
for k=1:length(x);
    xk=x(k);yk=y(k);
    ydt=-[xk-w]*tan(A)+D+ym;
    while ydt<[yk-(xk+w)*tan(A)];
        xc=[yk-ydt]/tan(A);
        if xc<xk+w & xc>xk-w;
            x1=xc;y1=yk;
        else
            x1=xk-w;y1=(xk-w)*tan(A)+ydt;
        end
        xc=[ym-ydt]/tan(A);
        if xc<xk+w & xc>xk-w;
            x2=xc;y2=ym;
        else
            x2=xk+w;y2=(xk+w)*tan(A)+ydt;
        end
        plot([x1,x2],[y1,y2],'k');
        ydt=ydt+D;
    end
end
hold off;

结果如下:


最新评论


hdwok

2008-02-28 20:27 匿名 211.68.*.*

你好!我想请教个问题:
我现在在做dsp滤波方面的研究,滤波系数是由matlab的切比雪夫函数cheby1()产生的,产生的数据a和b都是保留五位有效数字的,但我的dsp的c程序中float型数据是保留7位有效数字,而实际上由于初始的系数数据就只有五位正确的有效数字,而c程序中多保留的两位其实是无意义的,可以说是错误的,并且随着循环计算这种错误不断积累,到后来c程序中的数据居然发生了溢出。我想问一下:在c语言中有没有保留固定有效位的函数;或者能否令matlab产生的系数数据也是7位有效数字?
烦请赐教,不胜感激!



luobo

2008-02-29 15:05 匿名 222.56.*.*

C语言我没少用,不熟悉了。matlab里面可以用vpa函数处理。你再看看相关函数,



李宝

2008-03-01 10:25 匿名 220.249.*.*

刘老师你好!我在用matlab写一个二维波动的程序时要用到多重循环,用for做循环时总是死机,怎么优化多重循环?我把程序发你邮箱中.



luobo

2008-03-01 15:22 匿名 222.32.*.*

已经信件回复你了,请查收



hdwok

2008-03-01 15:47 匿名 211.68.*.*

感谢你的帮助,成功了!
再次感谢!



张中杰

2008-03-03 12:47 匿名 203.230.*.*

刘老师你好,我想请教个问题,我编个程序,运行结果和我想要不是很一致,请指教,不胜感激



张中杰

2008-03-03 12:48 匿名 203.230.*.*

程序已发到你的信箱



luobo

2008-03-04 12:05 匿名 222.32.*.*

我还没收到你的信件


评论 / 个人网页 / 扔小纸条
* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 


 

分类小组论坛
杂谈 , 娱乐、八卦 , 文学、艺术 , 体育 , 旅游、同城 , 象牙塔 , 情感 , 时尚、生活 , 星座 , 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定