利用Matlab绘制好看的弦图

目录
  • 封面图
  • 使用教程
    • 1.数据格式
    • 2.修饰弦
    • 3.圆弧状方块修饰
    • 4.字体调整
    • 5.显示和隐藏刻度
  • 工具函数完整代码
  • 封面图绘制代码
    • 封面一
    • 封面二

弦图在python中以及R中非常常见,但是MATLAB中却始终没有相关函数,file exchange中也没有工作做的较为完备的弦图绘制函数(不过现在有了,我已经往上面也传了一份hiahiahia)

仅工具函数主体部分约300行,字符数约8000,能画出与R语言同等质量的弦图实属不易,希望能有个`点赞``!!!

由于工具函数过长,将被放在最后展示,以下将先展示函数用法

封面图

使用教程

1.数据格式

数据要求为全部数值大于等于0的数值矩阵,或者table数组,或者数值矩阵+行列名元胞数组,首先举个数值矩阵的例子:

数值矩阵

dataMat=randi([0,5],[5,4]); 

% 绘图
CC=chordChart(dataMat);
CC=CC.draw();

这样由于没对各个对象命名,因此会自动命名为RnCn

数值矩阵+行列名元胞数组

这是最推荐的一种格式:

dataMat=[2 0 1 2 5 1 2;
         3 5 1 4 2 0 1;
         4 0 5 5 2 4 3];
colName={'G1','G2','G3','G4','G5','G6','G7'};
rowName={'S1','S2','S3'};

CC=chordChart(dataMat,'rowName',rowName,'colName',colName);
CC=CC.draw();

rowName要和矩阵的行相同大小

colName要和矩阵的列相同大小

对于本列子来说第2行第3列数值是1,就说明有一份能量从S2流向G3,也就在这俩之间需要画单位宽度的弦。

table 数组

需要使用如下格式的table数组:

当然,如果各个行没有命名的话依旧会自动命名的。

2.修饰弦

弦的批量修饰

弦的批量修饰可以使用setChordProp函数,一切Patch对象所具有的属性均可以被修饰,举个例子(修饰一下弦的颜色,边缘颜色,边缘线形状等):

CC.setChordProp('EdgeColor',[.3,.3,.3],'LineStyle','--',...
    'LineWidth',.1,'FaceColor',[.3,.3,.3])

弦的单独修饰

弦的单独修饰可以使用setChordMN函数,其中m,n值是和原始数值矩阵的行列完全对应的,举个例子(把S2流向G4的弦颜色更改为红色):

CC.setChordMN(2,4,'FaceColor',[1,0,0])

弦的颜色映射

使用setChordColorByMap函数进行颜色映射,

matlab 自带的colormap均可用:

或者也可自行放入一个n×3大小的颜色列表,程序会自动对其进行插值:举个例子:

CC.setChordColorByMap(copper(100))

3.圆弧状方块修饰

圆弧状方块批量修饰

使用

setSquareT_Prop

setSquareF_Prop

分别修饰上方方块和下方方块,一切Patch对象所具有的属性均可以被修饰,举个例子,上方方块批量修饰(改为黑色):

CC.setSquareT_Prop('FaceColor',[0,0,0])

圆弧状方块单独修饰

使用

setSquareT_N

setSquareF_N

分别修饰上方方块和下方方块,举个例子,上方第二个方块单独修饰(改为红色):

CC.setSquareT_N(2,'FaceColor',[.8,0,0])

4.字体调整

使用setFont函数对字体进行调整,所有text对象具有的属性均可以修饰,举个例子(更改文本的字号、字体和颜色):

CC.setFont('FontSize',25,'FontName','Cambria','Color',[0,0,.8])

5.显示和隐藏刻度

用法:

CC.tickState('on')
% CC.tickState('off')

工具函数完整代码

classdef chordChart
% @author : slandarer
% gzh  : slandarer随笔

% 使用示例:
% =========================================================================
% dataMat=[2 0 1 2 5 1 2;
%          3 5 1 4 2 0 1;
%          4 0 5 5 2 4 3];
% colName={'G1','G2','G3','G4','G5','G6','G7'};
% rowName={'S1','S2','S3'};
%
% CC=chordChart(dataMat,'rowName',rowName,'colName',colName);
% CC=CC.draw()

    properties
        ax
        arginList={'colName','rowName'}
        verMatlab   % MATLAB 版本: R2021a显示为2021,R2021b显示为2021.5
        chordTable  % table数组
        dataMat     % 数值矩阵
        colName={}; % 列名称
        rowName={}; % 行名称
        thetaSetF
        thetaSetT
        % -----------------------------------------------------------
        squareFHdl  % 绘制下方方块的图形对象矩阵
        squareTHdl  % 绘制下上方方块的图形对象矩阵
        nameFHdl    % 绘制下方文本的图形对象矩阵
        nameTHdl    % 绘制上方文本的图形对象矩阵
        chordMatHdl % 绘制弦的图形对象矩阵
        thetaTickFHdl % 刻度句柄
        thetaTickTHdl % 刻度句柄
        RTickFHdl % 轴线句柄
        RTickTHdl % 轴线句柄
    end

    methods
        function obj=chordChart(varargin)
            if isa(varargin{1},'matlab.graphics.axis.Axes')
                obj.ax=varargin{1};varargin(1)=[];
            else
                obj.ax=gca;
            end

            % 获取版本信息
            tver=version('-release');
            obj.verMatlab=str2double(tver(1:4))+(abs(tver(5))-abs('a'))/2;

            if obj.verMatlab<2017
                hold on
            else
                hold(obj.ax,'on')
            end

            obj.dataMat=varargin{1};varargin(1)=[];
            if isa(obj.dataMat,'table')
            obj.chordTable=obj.dataMat;
                if isempty(obj.chordTable.Properties.RowNames)
                    for i=1:size(obj.chordTable.Variables,1)
                        obj.rowName{i}=['R',num2str(i)];
                    end
                end
            else

            % 获取其他数据
            for i=1:(length(varargin)-1)
                tid=ismember(obj.arginList,varargin{i});
                if any(tid)
                obj.(obj.arginList{tid})=varargin{i+1};
                end
            end
            tzerocell{1,size(obj.dataMat,2)}=zeros(size(obj.dataMat,1),1);
            for i=1:size(obj.dataMat,2)
                tzerocell{1,i}=zeros(size(obj.dataMat,1),1);
            end
            if isempty(obj.colName)
                for i=1:size(obj.dataMat,2)
                    obj.colName{i}=['C',num2str(i)];
                end
            end
            if isempty(obj.rowName)
                for i=1:size(obj.dataMat,1)
                    obj.rowName{i}=['R',num2str(i)];
                end
            end

            % 创建table数组
            obj.chordTable=table(tzerocell{:});
            obj.chordTable.Variables=obj.dataMat;
            obj.chordTable.Properties.VariableNames=obj.colName;
            obj.chordTable.Properties.RowNames=obj.rowName;

            help chordChart
            end
        end

        function obj=draw(obj)
            obj.ax.XLim=[-1.38,1.38];
            obj.ax.YLim=[-1.38,1.38];
            obj.ax.XTick=[];
            obj.ax.YTick=[];
            obj.ax.XColor='none';
            obj.ax.YColor='none';
            obj.ax.PlotBoxAspectRatio=[1,1,1];

            % 计算绘图所用数值
            tDMat=obj.chordTable.Variables;
            tDFrom=obj.chordTable.Properties.RowNames;
            tDTo=obj.chordTable.Properties.VariableNames;

            tDMatUni=tDMat-min(min(tDMat));
            tDMatUni=tDMatUni./max(max(tDMatUni));

            sep1=1/20;
            sep2=1/40;

            ratioF=sum(tDMat,2)./sum(tDMat,[1,2]);
            ratioF=[0,ratioF'];
            ratioT=[0,sum(tDMat,1)./sum(tDMat,[1,2])];

            sepNumF=size(tDMat,1);
            sepNumT=size(tDMat,2);

            sepLen=pi*(1-2*sep1)*sep2;
            baseLenF=(pi*(1-sep2)-(sepNumF-1)*sepLen);
            baseLenT=(pi*(1-sep2)-(sepNumT-1)*sepLen);
            tColor=[61 96 137;76 103 86]./255;
            % 绘制下方方块
            for i=1:sepNumF
                theta1=2*pi-pi*sep1/2-sum(ratioF(1:i))*baseLenF-(i-1)*sepLen;
                theta2=2*pi-pi*sep1/2-sum(ratioF(1:i+1))*baseLenF-(i-1)*sepLen;
                theta=linspace(theta1,theta2,100);
                X=cos(theta);Y=sin(theta);
                obj.squareFHdl(i)=fill([1.05.*X,1.15.*X(end:-1:1)],[1.05.*Y,1.15.*Y(end:-1:1)],...
                    tColor(1,:),'EdgeColor','none');
                theta3=(theta1+theta2)/2;
                obj.nameFHdl(i)=text(cos(theta3).*1.28,sin(theta3).*1.28,tDFrom{i},'FontSize',12,'FontName','Arial',...
                    'HorizontalAlignment','center','Rotation',-(1.5*pi-theta3)./pi.*180);
                obj.RTickFHdl(i)=plot(cos(theta).*1.17,sin(theta).*1.17,'Color',[0,0,0],'LineWidth',.8,'Visible','off');
            end
            % 绘制上方放块
            for j=1:sepNumT
                theta1=pi-pi*sep1/2-sum(ratioT(1:j))*baseLenT-(j-1)*sepLen;
                theta2=pi-pi*sep1/2-sum(ratioT(1:j+1))*baseLenT-(j-1)*sepLen;
                theta=linspace(theta1,theta2,100);
                X=cos(theta);Y=sin(theta);
                obj.squareTHdl(j)=fill([1.05.*X,1.15.*X(end:-1:1)],[1.05.*Y,1.15.*Y(end:-1:1)],...
                    tColor(2,:),'EdgeColor','none');
                theta3=(theta1+theta2)/2;
                obj.nameTHdl(j)=text(cos(theta3).*1.28,sin(theta3).*1.28,tDTo{j},'FontSize',12,'FontName','Arial',...
                    'HorizontalAlignment','center','Rotation',-(.5*pi-theta3)./pi.*180);
                obj.RTickTHdl(j)=plot(cos(theta).*1.17,sin(theta).*1.17,'Color',[0,0,0],'LineWidth',.8,'Visible','off');
            end

            colorFunc=colorFuncFactory(flipud(summer(50)));
            % 绘制弦

            for i=1:sepNumF
                for j=sepNumT:-1:1
                    theta1=2*pi-pi*sep1/2-sum(ratioF(1:i))*baseLenF-(i-1)*sepLen;
                    theta2=2*pi-pi*sep1/2-sum(ratioF(1:i+1))*baseLenF-(i-1)*sepLen;
                    theta3=pi-pi*sep1/2-sum(ratioT(1:j))*baseLenT-(j-1)*sepLen;
                    theta4=pi-pi*sep1/2-sum(ratioT(1:j+1))*baseLenT-(j-1)*sepLen;

                    tRowV=tDMat(i,:);tRowV=[0,tRowV(end:-1:1)./sum(tRowV)];
                    tColV=tDMat(:,j)';tColV=[0,tColV./sum(tColV)];       

                    % 贝塞尔曲线断点计算
                    theta5=(theta2-theta1).*sum(tRowV(1:(sepNumT+1-j)))+theta1;
                    theta6=(theta2-theta1).*sum(tRowV(1:(sepNumT+2-j)))+theta1;
                    theta7=(theta3-theta4).*sum(tColV(1:i))+theta4;
                    theta8=(theta3-theta4).*sum(tColV(1:i+1))+theta4;
                    tPnt1=[cos(theta5),sin(theta5)];
                    tPnt2=[cos(theta6),sin(theta6)];
                    tPnt3=[cos(theta7),sin(theta7)];
                    tPnt4=[cos(theta8),sin(theta8)];

                    if j==sepNumT,obj.thetaSetF(i,1)=theta5;end
                    obj.thetaSetF(i,j+1)=theta6;
                    if i==1,obj.thetaSetT(1,j)=theta7;end
                    obj.thetaSetT(i+1,j)=theta8;

                    % 计算曲线
                    tLine1=bezierCurve([tPnt1;0,0;tPnt3],200);
                    tLine2=bezierCurve([tPnt2;0,0;tPnt4],200);
                    tline3=[cos(linspace(theta6,theta5,100))',sin(linspace(theta6,theta5,100))'];
                    tline4=[cos(linspace(theta7,theta8,100))',sin(linspace(theta7,theta8,100))'];
                    obj.chordMatHdl(i,j)=fill([tLine1(:,1);tline4(:,1);tLine2(end:-1:1,1);tline3(:,1)],...
                         [tLine1(:,2);tline4(:,2);tLine2(end:-1:1,2);tline3(:,2)],...
                         colorFunc(tDMatUni(i,j)),'FaceAlpha',.3,'EdgeColor','none');
                    if tDMat(i,j)==0
                        set(obj.chordMatHdl(i,j),'Visible','off')
                    end
                end

                % 绘制刻度线
                tX=[cos(obj.thetaSetF(i,:)).*1.17;cos(obj.thetaSetF(i,:)).*1.19;nan.*ones(1,sepNumT+1)];
                tY=[sin(obj.thetaSetF(i,:)).*1.17;sin(obj.thetaSetF(i,:)).*1.19;nan.*ones(1,sepNumT+1)];
                obj.thetaTickFHdl(i)=plot(tX(:),tY(:),'Color',[0,0,0],'LineWidth',.8,'Visible','off');
            end
            for j=1:sepNumT
                tX=[cos(obj.thetaSetT(:,j)').*1.17;cos(obj.thetaSetT(:,j)').*1.19;nan.*ones(1,sepNumF+1)];
                tY=[sin(obj.thetaSetT(:,j)').*1.17;sin(obj.thetaSetT(:,j)').*1.19;nan.*ones(1,sepNumF+1)];
                obj.thetaTickTHdl(j)=plot(tX(:),tY(:),'Color',[0,0,0],'LineWidth',.8,'Visible','off');
            end

            % 贝塞尔函数
            function pnts=bezierCurve(pnts,N)
                t=linspace(0,1,N);
                p=size(pnts,1)-1;
                coe1=factorial(p)./factorial(0:p)./factorial(p:-1:0);
                coe2=((t).^((0:p)')).*((1-t).^((p:-1:0)'));
                pnts=(pnts'*(coe1'.*coe2))';
            end

            % 渐变色句柄生成函数
            function colorFunc=colorFuncFactory(colorList)
                x=(0:size(colorList,1)-1)./(size(colorList,1)-1);
                y1=colorList(:,1);y2=colorList(:,2);y3=colorList(:,3);
                colorFunc=@(X)[interp1(x,y1,X,'linear')',interp1(x,y2,X,'linear')',interp1(x,y3,X,'linear')'];
            end
        end
        % =================================================================
        % 批量弦属性设置
        function setChordProp(obj,varargin)
            tDMat=obj.chordTable.Variables;
            for i=1:size(tDMat,1)
                for j=1:size(tDMat,2)
                    set(obj.chordMatHdl(i,j),varargin{:});
                end
            end
        end
        % 单独弦属性设置
        function setChordMN(obj,m,n,varargin)
            set(obj.chordMatHdl(m,n),varargin{:});
        end
        % 根据colormap映射颜色
        function setChordColorByMap(obj,colorList)
            tDMat=obj.chordTable.Variables;
            tDMatUni=tDMat-min(min(tDMat));
            tDMatUni=tDMatUni./max(max(tDMatUni));

            colorFunc=colorFuncFactory(colorList);
            for i=1:size(tDMat,1)
                for j=1:size(tDMat,2)
                    set(obj.chordMatHdl(i,j),'FaceColor',colorFunc(tDMatUni(i,j)));
                end
            end
            % 渐变色句柄生成函数
            function colorFunc=colorFuncFactory(colorList)
                x=(0:size(colorList,1)-1)./(size(colorList,1)-1);
                y1=colorList(:,1);y2=colorList(:,2);y3=colorList(:,3);
                colorFunc=@(X)[interp1(x,y1,X,'linear')',interp1(x,y2,X,'linear')',interp1(x,y3,X,'linear')'];
            end
        end

        % -----------------------------------------------------------------
        % 批量上方方块属性设置
        function setSquareT_Prop(obj,varargin)
            tDMat=obj.chordTable.Variables;
            for j=1:size(tDMat,2)
                set(obj.squareTHdl(j),varargin{:});
            end
        end
        % 单独上方方块属性设置
        function setSquareT_N(obj,n,varargin)
            set(obj.squareTHdl(n),varargin{:});
        end
        % 批量下方方块属性设置
        function setSquareF_Prop(obj,varargin)
            tDMat=obj.chordTable.Variables;
            for i=1:size(tDMat,1)
                set(obj.squareFHdl(i),varargin{:});
            end
        end
        % 单独上方方块属性设置
        function setSquareF_N(obj,n,varargin)
            set(obj.squareFHdl(n),varargin{:});
        end

        % -----------------------------------------------------------------
        % 字体设置
        function setFont(obj,varargin)
            tDMat=obj.chordTable.Variables;
            for i=1:size(tDMat,1)
                set(obj.nameFHdl(i),varargin{:});
            end
            for j=1:size(tDMat,2)
                set(obj.nameTHdl(j),varargin{:});
            end
        end

        % -----------------------------------------------------------------
        % 刻度开关
        function tickState(obj,state)
            tDMat=obj.chordTable.Variables;
            for i=1:size(tDMat,1)
                set(obj.thetaTickFHdl(i),'Visible',state);
                set(obj.RTickFHdl(i),'Visible',state);
            end
            for j=1:size(tDMat,2)
                set(obj.thetaTickTHdl(j),'Visible',state);
                set(obj.RTickTHdl(j),'Visible',state);
            end
        end
    end
end

封面图绘制代码

封面一

% demo 1
% @author : slandarer
% gzh  : slandarer随笔

dataMat=[2 0 1 2 5 1 2;
         3 5 1 4 2 0 1;
         4 0 5 5 2 4 3];
colName={'G1','G2','G3','G4','G5','G6','G7'};
rowName={'S1','S2','S3'};

CC=chordChart(dataMat,'rowName',rowName,'colName',colName);
CC=CC.draw();

CC.setFont('FontSize',17,'FontName','Cambria')
CC.tickState('on')

封面二

% demo 2
% @author : slandarer
% gzh : slandarer随笔

dataMat=[2 0 1 2 5 1 2;
         3 5 1 4 2 0 1;
         4 0 5 5 2 4 3];
colName={'G1','G2','G3','G4','G5','G6','G7'};
rowName={'S1','S2','S3'};

CC=chordChart(dataMat,'rowName',rowName,'colName',colName);
CC=CC.draw();

% 弦属性设置 ===============================================================
% CC.setChordProp('EdgeColor',[.3,.3,.3],'LineStyle','--',...
%     'LineWidth',.1,'FaceColor',[.3,.3,.3])

% CC.setChordMN(2,4,'FaceColor',[1,0,0])

CC.setChordColorByMap(copper(100))

% 方块属性设置 =============================================================
CC.setSquareT_Prop('FaceColor',[0,0,0])
CC.setSquareT_N(2,'FaceColor',[.8,0,0])
% CC.setSquareF_Prop('FaceColor',[0,0,0])
% CC.setSquareF_N(2,'FaceColor',[.8,0,0])

% 字体设置 =================================================================
CC.setFont('FontSize',17,'FontName','Cambria','Color',[0,0,.8])

% 刻度开关设置 =============================================================
CC.tickState('on')

以上就是利用Matlab绘制好看的弦图的详细内容,更多关于Matlab弦图的资料请关注我们其它相关文章!

(0)

相关推荐

  • Matlab绘制雨云图的方法详解

    目录 介绍 横向雨云图 纵向雨云图 介绍 写了俩代码模板,用来绘制横向云雨图与纵向云雨图,云雨图其实就是用把小提琴图拆开来的模板,想获取小提琴图绘制函数的可以看这里:基于Matlab绘制小提琴图的示例代码 后面的俩模板用的时候只需要换换数据,颜色及每一类名称即可,雨云图绘制效果如下: 横向雨云图 function rainCloudsTMPL1 % @author: slandarer % 在这里放入你的数据============================================

  • 基于Matlab绘制洛伦兹吸引子相图

    目录 1.公式及Lorenz函数 2.混沌吸引子图像 3.混沌吸引子图像 4.封面图绘制 洛伦兹吸引子(Lorenz attractor)是由MIT大学的气象学家Edward Lorenz在1963年给出的,他给出第一个混沌现象——蝴蝶效应........废话不多说. 反正咱就是,好看且有用咱就写代码,第零部分给出公式.第一部分给出 混沌吸引子 图像,第二部分给出庞加莱截面法 分岔图 绘制. 1.公式及Lorenz函数 Lorenz微分方程组定义如下: 非常容易能写出该微分方程组函数: func

  • 详解Matlab如何绘制圆角半透明图例

    目录 基本使用 使用说明 完整代码 目前MATLAB的legend图例是不支持圆角和半透明的,欸,不能咱就自己画,就是把原始图例隐藏后不断追踪其位置绘制半透明的圆角矩形嘛,这有任何难度吗???完全没有!!因此就有了这篇推送(目前不支持三维绘图): 基本使用 继续假设我们编写了如下代码: t=0:0.35:3*pi; plot(t,sin(t),'Marker','d','LineWidth',2,'Color',[102,194,166]./255) hold on plot(t,cos(t./

  • Matlab实现带竖线散点的核密度图的绘制

    目录 带竖线散点的核密度图绘制模板 part1 数据 part2 格式 part3 配色 part4 模板完整代码 带竖线散点的核密度图绘制模板 今天带来一个带竖线散点的核密度图绘制模板,作为模板,想要画出属于自己的图,需要修改的就只有数据,格式,配色三样,以下给出模板使用详细讲解: part1 数据 这里的数据需要通过Data(n).X=...的格式设置,例如,三组数据: % 导入数据,更多的数据也请使用 % Data(n).X=......的格式 Data(1).X=mvnrnd(40,60

  • 详解Matlab如何绘制桑基图

    目录 详细用法 1使用示例 2输入参数 3输出 函数完整代码 使用示例代码 这次主要是分享自己写的一个函数,用来绘制桑基图,效果大概是下面这样子: 先说明函数(sankey2)怎么用,函数完整代码放在博客最后 详细用法 1 使用示例 新建一个m文件,运行如下代码 List={'a1',1,'A'; 'a2',1,'A'; 'a3',1,'A'; 'a3',0.5,'C'; 'b1',1,'B'; 'b2',1,'B'; 'b3',1,'B'; 'c1',1,'C'; 'c2',1,'C'; 'c

  • Matlab绘制散点密度图的教程详解

    目录 效果 1工具函数完整代码 2参数说明 3使用方式 3.1散点赋色 3.2等高线图 3.3带直方图的散点图 3.4带直方图的等高线图 4使用方式扩展–与ggplot修饰器联动 效果 原理也很简单,通过matlab自带的ksdensity获得网格每一点密度,通过密度拟合曲面,再计算每个数据点对应的概率,并将概率映射到颜色即可为了怕大家找不到函数这次工具函数放到最前面 1工具函数完整代码 function [CData,h,XMesh,YMesh,ZMesh,colorList]=density

  • 利用Matlab绘制好看的弦图

    目录 封面图 使用教程 1.数据格式 2.修饰弦 3.圆弧状方块修饰 4.字体调整 5.显示和隐藏刻度 工具函数完整代码 封面图绘制代码 封面一 封面二 弦图在python中以及R中非常常见,但是MATLAB中却始终没有相关函数,file exchange中也没有工作做的较为完备的弦图绘制函数(不过现在有了,我已经往上面也传了一份hiahiahia) 仅工具函数主体部分约300行,字符数约8000,能画出与R语言同等质量的弦图实属不易,希望能有个`点赞``!!! 由于工具函数过长,将被放在最后展

  • 利用Matlab绘制好看的旋转九边形

    目录 PART.0 使用效果 PART.1 程序说明 PART.2 完整代码 PART.0 使用效果 PART.1 程序说明 这个代码主要复刻的Clayton Shonkwiler使用Wolfram绘制的作品(二十个旋转的正九变形),据说其灵感来源于Thomas Davis的一些作品,Clayton Shonkwiler的更多作品可以在这个地址查看 PART.2 完整代码 function nonagon20 % @author:slandarer % axes属性设置 ax=gca; hold

  • 利用Python绘制好看的玫瑰花图

    目录 一.基本极坐标图 二.极半径图 参数介绍 三.画玫瑰花图 AngleAxisOpts参数介绍: TooltipOpts参数介绍: 开始画玫瑰花图 今天主要给大家介绍如何用pyecharts画各种漂亮的数学图形 一.基本极坐标图 说简单点,基本极坐标图就是圆形的散点图(柱状图或折线图),代码如下: import random from pyecharts import options as opts from pyecharts.charts import Polar data = [(i,

  • 如何利用Matlab绘制出好看的火山图

    这里画了一个示例: 数据来源 绘制效果: 代码及说明: 使用代码时只需要改一开始导入的数据,和代码提示中X坐标区域范围和Y坐标区域范围,完整代码如下所示: % 读取数据 data=readmatrix('volcano.txt'); logFC=data(:,2); padj=data(:,3); DB_not=(padj>0.5)|(logFC<0.5&logFC>-0.5); DB_up=padj<=0.05&logFC>=0.5; DB_down=pad

  • 利用Matlab绘制优美的k线图

    目录 效果 代码 效果一 极光 效果二 暖调 效果三 黑白 本期又是一个花里胡哨的数据可视化,前两天刷到了耐克的视觉设计师Gladys Orteza绘制的k线图作品,把沉闷的股票图变成了精彩的风景,但是那些大部分是真的完全看不清,我这里挑选了几个能看清的k线图风格将其用MATLAB进行了实现. 效果 代码 代码中使用的数据 SimulatedStock.mat 是MATLAB自带的示例数据,因此不需要下载,不过要绘制k线图,仍需安装Financial Toolbox工具箱. 效果一 极光 % @

  • 利用Matlab绘制地图的超详细教程

    目录 MappingToolbox工具箱安装 局部区域陆地绘制 映射贴图 纹理贴图 线路图绘制 usamap axesm 一些地图绘制可用简易函数 subplot tightmap 边框标签网格快速开关函数 colormap colorbar worldmap和usamap是axesm的子类,worldmap是用于生成世界地图坐标区域,usamap用于生成美国地图坐标区域,本文先在worldmap函数基础上讲解如何导入各种数据绘制各种类型图片,略提一下如何使用usamap,再讲解axesm的各种

  • 利用Matlab绘制各类特殊图形的实例代码

    Matlab绘图介绍 强大的绘图功能是Matlab的特点之一,Matlab提供了一系列的绘图函数,用户不需要过多的考虑绘图的细节,只需要给出一些基本参数就能得到所需图形,这类函数称为高层绘图函数.此外,Matlab还提供了直接对图形句柄进行操作的低层绘图操作.这类操作将图形的每个图形元素(如坐标轴.曲线.文字等)看做一个独立的对象,系统给每个对象分配一个句柄,可以通过句柄对该图形元素进行操作,而不影响其他部分. Matlab绘制特殊图形 1. 绘制极坐标图 说明:使用polarplot函数绘制极

  • 利用Matlab绘制一个可爱的南瓜灯

    目录 效果及原理 原理 实现方法 完整代码 效果及原理 效果如下: 调一下数据还能改成三角眼: 原理 南瓜主体函数从知友 [九章算法] 的一张图而来,大体是瓜身瓜柄分段函数,然后绕着z轴旋转一周得到曲面,我对数值做了微调,原图及原始数据: 实现方法 这里我故意保留了网格让南瓜看起来有一点布娃娃的感觉,(大家也可以根据自己喜好改写,例如将’EdgeColor’设置为’none’并打个光啥的) % 构造网格 [t,p]=meshgrid(linspace(0,2*pi,200),linspace(0

  • QT利用QPainter绘制三维饼状图

    目录 一.项目介绍 二.项目基本配置 三.UI界面设置 四.主程序实现 4.1 widget.h头文件 4.2 widget.cpp源文件 五.效果演示 一.项目介绍 本文介绍利用QPainter实现三维饼状图的绘制,由于Qt中没有三维饼状图的绘制组件,因此只能自行绘制. 二.项目基本配置 新建一个Qt案例,项目名称为“PieTest”,基类选择“QWidget”,取消选中创建UI界面复选框,完成项目创建. 三.UI界面设置 无UI界面 四.主程序实现 4.1 widget.h头文件 头文件中只

  • 利用Matlab绘制一款专属进度条

    目录 1.使用效果 2.制作历程 3.函数用法 4.工具函数完整代码 waitBar_SL1.m waitBar_SL2.m waitBar_SL3.m waitBar_SL4.m 5.下载地址 1.使用效果 2.制作历程 首先我有个程序需要用到进度条,我首先试了一下MATLAB自带的进度条: bar=waitbar(0,'读取数据中...'); % waitbar显示进度条 for i=1:1000 A(i)=rand(); str=['计算中...',num2str(100*i/1000),

随机推荐