MATLAB 雷达图画图函数

本人终于写了第一篇博客大笑

因毕业设计画图需要,用MATLAB写了一个自动画雷达图的程序,可以画两种雷达图:多边形风格和圆风格的雷达图,有需要的朋友可以参考。

一、多边形风格雷达图


画图的原理是,先一条一条画直线,然后再标注文字,然后填充图形。画直线用plot函数,标文字用text函数,填充图形用fill函数。这里有几个小技巧:

  1. 后画的内容会遮挡先画的内容,由于直线不便调透明, 所以先画直线再写字。
  2. 使用默认的对齐方式时,文字有时候会重叠在图上,不美观。所以需要根据文字的位置来设置合适的对其方式。
  3. 使用axes equal使横纵坐标相同,可以更方便地计算坐标。可以把图像中心定义为0,0点,然后用极坐标的形式去确定画图坐标。
  4. 为了使图窗大小正好是雷达图的大小,防止有些文字显示在图窗外面,需要读取各文字的extent属性,确定他们的坐标,然后调整绘图大小使得画图区足够容纳他们。

画图函数整合成draw_radar(data,lim,prefer_range,labels)函数,data是要画图的数据(根据数据的个数来确定雷达图的轴数),lim是各指标画图上下限范围,prefer_range是各指标参考上下限范围,labels是坐标轴名称。

function draw_radar(data,lim,prefer_range,labels)
    n=length(data);
    adj_data=zeros(n,1);
    point=zeros(n,2);
    adj_preferl=zeros(n,1);
    preferl_point=zeros(n,2);
    adj_preferu=zeros(n,1);
    preferu_point=zeros(n,2);
    
    set(gca,'units','normal','pos',[0 0 1 1]);
    axis off
    axis equal
    hold on
    theta_last=pi/2;
    for i=1:n
        theta=2*pi/n*i+pi/2;
        plot([0,500*cos(theta)],[0,500*sin(theta)],'k-','linewidth',2);
        for j=1:5
           plot([j*100*cos(theta_last),j*100*cos(theta)],[j*100*sin(theta_last),j*100*sin(theta)],'--','linewidth',0.75,'color',[0.5,0.5,0.5]);
        end
        
        theta_last=theta;
        if data(i)<lim(i,1)
            adj_data(i)=0;
        elseif data(i)>lim(i,2)
            adj_data(i)=500;
        else
            adj_data(i)=(data(i)-lim(i,1))/(lim(i,2)-lim(i,1))*500;
        end
        point(i,1:2)=[adj_data(i)*cos(theta);adj_data(i)*sin(theta)];
        adj_preferl(i)=(prefer_range(i,1)-lim(i,1))/(lim(i,2)-lim(i,1))*500;
        preferl_point(i,1:2)=[adj_preferl(i)*cos(theta);adj_preferl(i)*sin(theta)];
        adj_preferu(i)=(prefer_range(i,2)-lim(i,1))/(lim(i,2)-lim(i,1))*500;
        preferu_point(i,1:2)=[adj_preferu(i)*cos(theta);adj_preferu(i)*sin(theta)];
        text_around(510*cos(theta),510*sin(theta),labels{i},theta);
    end
    
    plot([preferl_point(:,1);preferl_point(1,1)],[preferl_point(:,2);preferl_point(1,2)],'b-','linewidth',1.5);
    plot([prefe
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值