zoukankan      html  css  js  c++  java
  • matlab多变量绘图函数(类似ggplot2)

    1.多变量绘图

    由于在matlab绘图时遇到多个变量,需要逐一绘制(还没找到别的好方法),在此过程中使用hold on保持图形,比较繁琐,所以将其封装成为以下函数,简化该过程。目的是以更接近统计学的思维去绘图,当然还十分粗糙,和ggplot2没得比,不过出发点是向着它努力的。

    函数如下:

    function mulplot(data,nums,p,legfun)
    %data:待绘图的数据,每列一个变量
    %nums:绘图所用数据所在列1×3,依次为颜色、横坐标、纵坐标
    %p:绘制类型,'l'代表线条,'p'代表散点
    %legfun:一个函数,用于修饰图例
    u=unique(data(:,nums(1)));
    for i=1:length(u)
        subdata=data(data(:,nums(1))==u(i),:);
        if p=='l'
            plot(subdata(:,nums(2)),subdata(:,nums(3)));
        elseif p=='p'
            scatter(subdata(:,nums(2)),subdata(:,nums(3)));
        end
        hold on;
    end
    hold off;
    leg=num2cell(string(u));
    for i=1:length(u)
        leg{i}=legfun(leg{i});
    end
    legend(leg);
    end
    

    测试如下:

    n=5;
    a=1:n;
    x=repmat(a,1,n);
    y=repelem(a,1,n);
    z=x./(y+1);
    data=[x',y',z'];
    legfun=@(x) strcat("x=",x);
    mulplot(data,[1,2,3],'l',legfun);
    xlabel('y');ylabel('z');
    

    得到图像如下:

    2.色盲友好色函数

    之前在这里提到了色盲友好色:https://www.cnblogs.com/dingdangsunny/p/15305232.html#_label2

    但是我们虽然知道了这些颜色的RGB,每次用起来还是不方便,总要手动操作一番,所以写成函数,方便使用。

    函数:

    %blind.m将当前图窗的绘图色序设置为色盲友好色
    blind_friendly = [0,114,178;
        230,159,0;
        240,228,66;
        204,121,167;
        0,158,115;
        86,180,233;
        213,94,0]/255;
             
    colororder(blind_friendly);
    

    直接还是使用上面的案例,在末尾加上一句即可。

    测试:

    n=5;
    a=1:n;
    x=repmat(a,1,n);
    y=repelem(a,1,n);
    z=x./(y+1);
    data=[x',y',z'];
    legfun=@(x) strcat("x=",x);
    mulplot(data,[1,2,3],'l',legfun);
    xlabel('y');ylabel('z');
    blind;
    

    效果:

    对比可以发现其差异,使用简便,颜色已被替换为友好色。但是这只适用于线条数量小于等于7的情况,当数量大于7时可能要同时使用线型区分,或考虑其他方法。

  • 相关阅读:
    第四章JAVA EE基础知识
    第二章代码审计环境搭建
    第三章代码审计辅助工具简介
    python json.dumps 中文需要注意的事项
    multiprocessing 使用实践
    Python中*args和**kwargs的使用实践
    python 继承学习记录
    关于vue-element-admin启动项目遇到的一些问题
    @RequestParam
    前端菜单点击切换样式,菜单控制iframe
  • 原文地址:https://www.cnblogs.com/dingdangsunny/p/15652010.html
Copyright © 2011-2022 走看看