用户名:  密码:   
网站首页即时通讯活动公告最新消息科技前沿学人动向两岸三地人在海外历届活动关于我们联系我们申请加入
栏目导航 — 美国华裔教授专家网最新消息内外互动
关键字  范围   
 
这些美丽大方的弦图居然都是用MATLAB画的?
2024/4/13 10:51:11 | 浏览:221 | 评论:0

这些美丽大方的弦图居然都是用MATLAB画的?

这些美丽大方的弦图居然都是用MATLAB画的?


这些美丽大方的弦图居然都是用MATLAB画的?

这些美丽大方的弦图居然都是用MATLAB画的?

这些美丽大方的弦图居然都是用MATLAB画的?

什么?这些美丽大方的弦图都是MATLAB画的???

没错都是由我本人开发的弦图绘制工具包实现的:

chord chart 弦图https://www.mathworks.com/matlabcentral/fileexchange/116550-chord-chart
Digraph chord chart 有向弦图 https://www.mathworks.com/matlabcentral/fileexchange/121043-digraph-chord-chart
这俩工具包可以去链接所示地址下载,也可去文末所示的gitee仓库下载,本期只展示怎么调用函数绘图,篇幅问题就不把工具函数进行展示了,请自行下载工具包。当然也可以直接去文末所示gitee仓库下载整和好的全部文件。

编写本篇文章的原因是,已经由很多人开始使用我开发的弦图绘制工具,但是对一些样式能不能设置不太了解,作为开发者也算是比较了解工具的实现原理,能比较灵活的运用,于是就萌生了挑战绘制各种样式弦图的想法,目前有的代码并不算短,未来有可能我会将一部分代码集成进工具里,让大家能够一两行代码实现以下好多行代码的效果。废话不多说,来看这个MATLAB工具包当前版本能做到什么程度叭:

弦图 1

这些美丽大方的弦图居然都是用MATLAB画的?


这些美丽大方的弦图居然都是用MATLAB画的?

rng(2)

dataMat = randi([0,5], [11,5]);
dataMat(1:6,1)= 0;
dataMat([11,7],1)= [45,25];
dataMat([1,4,5,7],2)= [20,20,30,30];
dataMat(:,3)= 0;
dataMat(6,3)= 45;
dataMat(1:5,4)= 0;
dataMat([6,7],4)= [25,25];
dataMat([5,6,9],5)= [25,25,25];

colName = {'Fly', 'Beetle', 'Leaf', 'Soil', 'Waxberry'};
rowName = {'Bartomella', 'Bradyrhizobium', 'Dysgomonas', 'Enterococcus',...
           'Lactococcus', 'norank', 'others', 'Pseudomonas', 'uncultured',...
           'Vibrionimonas', 'Wolbachia'};

figure('Units','normalized', 'Position',[.02,.05,.6,.85])
CC = chordChart(dataMat, 'rowName',rowName, 'colName',colName, 'Sep',1/80);
CC = CC.draw();
% 修改上方方块颜色(Modify the color of the blocks above)
CListT = [0.7765 0.8118 0.5216; 0.4431 0.4706 0.3843; 0.5804 0.2275 0.4549;
          0.4471 0.4039 0.6745; 0.0157 0      0     ];
for i = 1:size(dataMat, 2)
    CC.setSquareT_N(i, 'FaceColor',CListT(i,:))
end
% 修改下方方块颜色(Modify the color of the blocks below)
CListF = [0.5843 0.6863 0.7843; 0.1098 0.1647 0.3255; 0.0902 0.1608 0.5373;
          0.6314 0.7961 0.2118; 0.0392 0.2078 0.1059; 0.0157 0      0     ;
          0.8549 0.9294 0.8745; 0.3882 0.3255 0.4078; 0.5020 0.7216 0.3843;
          0.0902 0.1843 0.1804; 0.8196 0.2314 0.0706];
for i = 1:size(dataMat, 1)
    CC.setSquareF_N(i, 'FaceColor',CListF(i,:))
end
% 修改弦颜色(Modify chord color)
for i = 1:size(dataMat, 1)
    for j = 1:size(dataMat, 2)
        CC.setChordMN(i,j, 'FaceColor',CListT(j,:), 'FaceAlpha',.5)
    end
end

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


% CC.labelRotate('off')
% textHdl = findobj(gca,'Tag','ChordLabel');
% for i = 1:length(textHdl)
%     if textHdl(i).Position(2)< 0
%         if abs(textHdl(i).Position(1))> .7
%             textHdl(i).Rotation = textHdl(i).Rotation + 45;
%             textHdl(i).HorizontalAlignment = 'right';
%             if textHdl(i).Rotation > 90
%                 textHdl(i).Rotation = textHdl(i).Rotation + 180;
%                 textHdl(i).HorizontalAlignment = 'left';
%             end
%         else
%             textHdl(i).Rotation = textHdl(i).Rotation + 10;
%             textHdl(i).HorizontalAlignment = 'right';
%         end
%     end
% end
弦图 2
这些美丽大方的弦图居然都是用MATLAB画的?
rng(3)
dataMat = randi([1,15], [7,22]);
dataMat(dataMat < 11)= 0;
dataMat(1, sum(dataMat, 1)== 0)= 15;
colName = {'A2M', 'FGA', 'FGB', 'FGG', 'F11', 'KLKB1', 'SERPINE1', 'VWF',...
           'THBD', 'TFPI', 'PLAT', 'SERPINA5', 'SERPIND1', 'F2', 'PLG', 'F12',...
           'SERPINC1', 'SERPINA1', 'PROS1', 'SERPINF2', 'F13A1', 'PROC'};
rowName = {'Lung', 'Spleen', 'Liver', 'Heart',...
           'Renal cortex', 'Renal medulla', 'Thyroid'};

figure('Units','normalized', 'Position',[.02,.05,.6,.85])
CC = chordChart(dataMat, 'rowName',rowName, 'colName',colName, 'Sep',1/80, 'LRadius',1.21);
CC = CC.draw();
CC.labelRotate('on')

% 单独设置每一个弦末端方块(Set individual end blocks for each chord)
% Use obj.setEachSquareF_Prop
% or  obj.setEachSquareT_Prop
% F means from(blocks below)
% T means to  (blocks above)
CListT = [173,70,65; 79,135,136]./255;
% Upregulated:1 | Downregulated:2
Regulated = rand([7, 22]);
Regulated =(Regulated < .8)+ 1;
for i = 1:size(Regulated, 1)
    for j = 1:size(Regulated, 2)
        CC.setEachSquareT_Prop(i, j, 'FaceColor', CListT(Regulated(i,j),:))
    end
end
% 绘制图例(Draw legend)
H1 = fill([0,1,0] + 100, [1,0,1] + 100, CListT(1,:), 'EdgeColor','none');
H2 = fill([0,1,0] + 100, [1,0,1] + 100, CListT(2,:), 'EdgeColor','none');
lgdHdl = legend([H1,H2], {'Upregulated','Downregulated'}, 'AutoUpdate','off', 'Location','best');
lgdHdl.ItemTokenSize = [12,12];
lgdHdl.Box = 'off';
lgdHdl.FontSize = 13;

% 修改下方方块颜色(Modify the color of the blocks below)
CListF = [128,108,171; 222,208,161; 180,196,229; 209,150,146; 175,201,166;
          134,156,118; 175,175,173]./255;
for i = 1:size(dataMat, 1)
    CC.setSquareF_N(i, 'FaceColor',CListF(i,:))
end
% 修改弦颜色(Modify chord color)
for i = 1:size(dataMat, 1)
    for j = 1:size(dataMat, 2)
        CC.setChordMN(i,j, 'FaceColor',CListF(i,:), 'FaceAlpha',.45)
    end
end
弦图 3
这些美丽大方的弦图居然都是用MATLAB画的?
dataMat = rand([15,15]);
dataMat(dataMat > .15)= 0;

CList = [ 75,146,241; 252,180, 65; 224, 64, 10;   5,100,146; 191,191,191;
          26, 59,105; 255,227,130;  18,156,221; 202,107, 75;   0, 92,219;
         243,210,136;  80, 99,129; 241,185,168; 224,131, 10; 120,147,190]./255;

figure('Units','normalized', 'Position',[.02,.05,.6,.85])
BCC = biChordChart(dataMat, 'Arrow','on', 'CData',CList);
BCC = BCC.draw();

% 添加刻度
BCC.tickState('on')

% 修改字体,字号及颜色
BCC.setFont('FontName','Cambria', 'FontSize',17, 'Color',[0,0,.8])
弦图 4
这些美丽大方的弦图居然都是用MATLAB画的?


这些美丽大方的弦图居然都是用MATLAB画的?

rng(5)
dataMat = randi([1,20], [5,5]);
dataMat(1,1)= 110;
dataMat(2,2)= 40;
dataMat(3,3)= 50;
dataMat(5,5)= 50;

CList1 = [164,190,158; 216,213,153; 177,192,208; 238,238,227; 249,217,153]./255;
CList2 = [247,204,138; 128,187,185; 245,135,124; 140,199,197; 252,223,164]./255;
CList = CList2;
NameList={'CHORD','CHART','MADE','BY','SLANDARER'};

figure('Units','normalized', 'Position',[.02,.05,.6,.85])
BCC = biChordChart(dataMat, 'Arrow','on', 'CData',CList, 'Sep',1/30, 'Label',NameList, 'LRadius',1.33);
BCC = BCC.draw();

% 添加刻度
BCC.tickState('on')

% 修改弦颜色(Modify chord color)
for i = 1:size(dataMat, 1)
    for j = 1:size(dataMat, 2)
        if dataMat(i,j)> 0
            BCC.setChordMN(i,j, 'FaceAlpha',.7, 'EdgeColor',CList(i,:)./1.1)
        end
    end
end
% 修改方块颜色(Modify the color of the blocks)
for i = 1:size(dataMat, 1)
    BCC.setSquareN(i, 'EdgeColor',CList(i,:)./1.7)
end

% 修改字体,字号及颜色
BCC.setFont('FontName','Cambria', 'FontSize',17)
BCC.tickLabelState('on')
BCC.setTickFont('FontName','Cambria', 'FontSize',9)
弦图 5
这些美丽大方的弦图居然都是用MATLAB画的?
dataMat=randi([1,20], [14,3]);
dataMat(11:14,1)= 0;
dataMat(6:10,2)= 0;
dataMat(1:5,3)= 0;

colName =  compose('C%d', 1:3);
rowName = [compose('A%d', 1:7), compose('B%d', 7:-1:1)];

figure('Units','normalized', 'Position',[.02,.05,.6,.85])
CC = chordChart(dataMat, 'rowName',rowName, 'colName',colName, 'Sep',1/80);
CC = CC.draw();

% 修改上方方块颜色(Modify the color of the blocks above)
for i = 1:size(dataMat, 2)
    CC.setSquareT_N(i, 'FaceColor',[190,190,190]./255)
end
% 修改下方方块颜色(Modify the color of the blocks below)
CListF=[255,244,138; 253,220,117; 254,179, 78; 253,190, 61;
        252, 78, 41; 228, 26, 26; 178,  0, 36;   4, 84,119;
          1,113,137;  21,150,155;  67,176,173;  68,173,158;
        123,204,163; 184,229,162]./255;
for i = 1:size(dataMat, 1)
    CC.setSquareF_N(i, 'FaceColor',CListF(i,:))
end
% 修改弦颜色(Modify chord color)
for i = 1:size(dataMat, 1)
    for j = 1:size(dataMat, 2)
        CC.setChordMN(i,j, 'FaceColor',CListF(i,:), 'FaceAlpha',.5)
    end
end


CC.tickState('on')
CC.tickLabelState('on')
弦图 6
这些美丽大方的弦图居然都是用MATLAB画的?
rng(2)

dataMat = randi([0,40], [20,4]);
dataMat(rand([20,4])< .2)= 0;
dataMat(1,3)= 500;
dataMat(20,1:4)= [140; 150; 80; 90];

colName = compose('T%d', 1:4);
rowName = compose('SL%d', 1:20);

figure('Units','normalized', 'Position',[.02,.05,.6,.85])
CC = chordChart(dataMat, 'rowName',rowName, 'colName',colName, 'Sep',1/80, 'LRadius',1.23);
CC = CC.draw();
% 修改上方方块颜色(Modify the color of the blocks above)
CListT = [0.62,0.49,0.27; 0.28,0.57,0.76
          0.25,0.53,0.30; 0.86,0.48,0.34];
for i = 1:size(dataMat, 2)
    CC.setSquareT_N(i, 'FaceColor',CListT(i,:))
end
% 修改下方方块颜色(Modify the color of the blocks below)
CListF = [0.94,0.84,0.60; 0.16,0.50,0.67; 0.92,0.62,0.49;
    0.48,0.44,0.60; 0.48,0.44,0.60; 0.71,0.79,0.73;
    0.96,0.98,0.98; 0.51,0.82,0.95; 0.98,0.70,0.82;
    0.97,0.85,0.84; 0.55,0.64,0.62; 0.94,0.93,0.60;
    0.98,0.90,0.85; 0.72,0.84,0.81; 0.85,0.45,0.49;
    0.76,0.76,0.84; 0.59,0.64,0.62; 0.62,0.14,0.15;
    0.75,0.75,0.75; 1.00,1.00,1.00];
for i = 1:size(dataMat, 1)
    CC.setSquareF_N(i, 'FaceColor',CListF(i,:))
end
CC.setSquareF_N(size(dataMat, 1), 'EdgeColor','k', 'LineWidth',1)
% 修改弦颜色(Modify chord color)
for i = 1:size(dataMat, 1)
    for j = 1:size(dataMat, 2)
        CC.setChordMN(i,j, 'FaceColor',CListT(j,:), 'FaceAlpha',.46)
    end
end

CC.tickState('on')
CC.labelRotate('on')
CC.setFont('FontSize',17, 'FontName','Cambria')
弦图 7
这些美丽大方的弦图居然都是用MATLAB画的?
dataMat = randi([10,10000], [10,10]);
dataMat(6:10,:)= 0;
dataMat(:,1:5)= 0;

NameList = {'BOC', 'ICBC', 'ABC', 'BOCM', 'CCB', ...
            'yama', 'nikoto', 'saki', 'koto', 'kawa'};
CList = [0.63,0.75,0.88
    0.67,0.84,0.75
    0.85,0.78,0.88
    1.00,0.92,0.93
    0.92,0.63,0.64
    0.57,0.67,0.75
    1.00,0.65,0.44
    0.72,0.73,0.40
    0.65,0.57,0.58
    0.92,0.94,0.96];

figure('Units','normalized', 'Position',[.02,.05,.6,.85])
BCC = biChordChart(dataMat, 'Arrow','on', 'CData',CList, 'Label',NameList);
BCC = BCC.draw();

% 修改弦颜色(Modify chord color)
for i = 1:size(dataMat, 1)
    for j = 1:size(dataMat, 2)
        if dataMat(i,j)> 0
            BCC.setChordMN(i,j, 'FaceAlpha',.85, 'EdgeColor',CList(i,:)./1.5, 'LineWidth',.8)
        end
    end
end
for i = 1:size(dataMat, 1)
    BCC.setSquareN(i, 'EdgeColor',CList(i,:)./1.5, 'LineWidth',1)
end


% 添加刻度、修改字体
BCC.tickState('on')
BCC.setFont('FontName','Cambria', 'FontSize',17)
弦图 8
这些美丽大方的弦图居然都是用MATLAB画的?
dataMat = rand([11,4]);
dataMat = round(10.*dataMat.*((11:-1:1).'+1))./10;

colName = {'A','B','C','D'};
rowName = {'Acidobacteriota', 'Actinobacteriota', 'Proteobacteria', ...
           'Chloroflexi', 'Bacteroidota', 'Firmicutes', 'Gemmatimonadota', ...
           'Verrucomicrobiota', 'Patescibacteria', 'Planctomyetota', 'Others'};

figure('Units','normalized', 'Position',[.02,.05,.8,.85])
CC = chordChart(dataMat, 'colName',colName, 'Sep',1/80, 'SSqRatio',30/100);% -30/100
CC = CC.draw();

% 修改上方方块颜色(Modify the color of the blocks above)
CListT = [0.93,0.60,0.62
    0.55,0.80,0.99
    0.95,0.82,0.18
    1.00,0.81,0.91];
for i = 1:size(dataMat, 2)
    CC.setSquareT_N(i, 'FaceColor',CListT(i,:))
end

% 修改下方方块颜色(Modify the color of the blocks below)
CListF = [0.75,0.73,0.86
    0.56,0.83,0.78
    0.00,0.60,0.20
    1.00,0.49,0.02
    0.78,0.77,0.95
    0.59,0.24,0.36
    0.98,0.51,0.45
    0.96,0.55,0.75
    0.47,0.71,0.84
    0.65,0.35,0.16
    0.40,0.00,0.64];
for i = 1:size(dataMat, 1)
    CC.setSquareF_N(i, 'FaceColor',CListF(i,:))
end

% 修改弦颜色(Modify chord color)
CListC = [0.55,0.83,0.76
    0.75,0.73,0.86
    0.00,0.60,0.19
    1.00,0.51,0.04];
for i = 1:size(dataMat, 1)
    for j = 1:size(dataMat, 2)
        CC.setChordMN(i,j, 'FaceColor',CListC(j,:), 'FaceAlpha',.4)
    end
end

% 单独设置每一个弦末端方块(Set individual end blocks for each chord)
% Use obj.setEachSquareF_Prop
% or  obj.setEachSquareT_Prop
% F means from(blocks below)
% T means to  (blocks above)
for i = 1:size(dataMat, 1)
    for j = 1:size(dataMat, 2)
        CC.setEachSquareT_Prop(i,j, 'FaceColor', CListF(i,:))
    end
end

% 添加刻度
CC.tickState('on')

% 修改字体,字号及颜色
CC.setFont('FontName','Cambria', 'FontSize',17)

% 隐藏下方标签
textHdl = findobj(gca, 'Tag','ChordLabel');
for i = 1:length(textHdl)
    if textHdl(i).Position(2)< 0
        set(textHdl(i), 'Visible','off')
    end
end

% 绘制图例(Draw legend)
scatterHdl = scatter(10.*ones(size(dataMat,1)),10.*ones(size(dataMat,1)), ...
                     55, 'filled');
for i = 1:length(scatterHdl)
    scatterHdl(i).CData = CListF(i,:);
end
lgdHdl = legend(scatterHdl, rowName, 'Location','best', 'FontSize',16, 'FontName','Cambria', 'Box','off');
set(lgdHdl, 'Position',[.7482,.3577,.1658,.3254])
弦图 9
这些美丽大方的弦图居然都是用MATLAB画的?


这些美丽大方的弦图居然都是用MATLAB画的?

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

CList1 = [0.70,0.59,0.67
    0.62,0.70,0.62
    0.81,0.75,0.62
    0.80,0.62,0.56
    0.62,0.65,0.65];
CList2 = [0.02,0.02,0.02
    0.59,0.26,0.33
    0.38,0.49,0.38
    0.03,0.05,0.03
    0.29,0.28,0.32];
CList = CList2;

NameList={'CHORD','CHART','MADE','BY','SLANDARER'};

figure('Units','normalized', 'Position',[.02,.05,.6,.85])
BCC = biChordChart(dataMat, 'Arrow','on', 'CData',CList, 'Sep',1/30, 'Label',NameList, 'LRadius',1.33);
BCC = BCC.draw();

% 修改弦颜色(Modify chord color)
for i = 1:size(dataMat, 1)
    for j = 1:size(dataMat, 2)
        BCC.setChordMN(i,j, 'FaceAlpha',.5)
    end
end
% 修改方块颜色(Modify the color of the blocks)
for i = 1:size(dataMat, 1)
    BCC.setSquareN(i, 'EdgeColor',[0,0,0], 'LineWidth',5)
end

% 添加刻度
BCC.tickState('on')
% 修改字体,字号及颜色
BCC.setFont('FontSize',17, 'FontWeight','bold')
BCC.tickLabelState('on')
BCC.setTickFont('FontSize',9)
弦图 10
这些美丽大方的弦图居然都是用MATLAB画的?


这些美丽大方的弦图居然都是用MATLAB画的?


这些美丽大方的弦图居然都是用MATLAB画的?

rng(2)
dataMat = rand([14,5])> .3;

colName = {'phosphorylation', 'vasculature development', 'blood vessel development', ...
           'cell adhesion', 'plasma membrane'};
rowName = {'THY1', 'FGF2', 'MAP2K1', 'CDH2', 'HBEGF', 'CXCR4', 'ECSCR',...
           'ACVRL1', 'RECK', 'PNPLA6', 'CDH5', 'AMOT', 'EFNB2', 'CAV1'};

figure('Units','normalized', 'Position',[.02,.05,.9,.85])
CC = chordChart(dataMat, 'colName',colName, 'rowName',rowName, 'Sep',1/80, 'LRadius',1.2);
CC = CC.draw();


% 修改上方方块颜色(Modify the color of the blocks above)
CListT1 = [0.5686    0.1961    0.2275
    0.2275    0.2863    0.3765
    0.8431    0.7882    0.4118
    0.4275    0.4510    0.2706
    0.3333    0.2706    0.2510];
CListT2 = [0.4941    0.5490    0.4118
    0.9059    0.6510    0.3333
    0.8980    0.6157    0.4980
    0.8902    0.5137    0.4667
    0.4275    0.2824    0.2784];
CListT3 = [0.4745    0.5843    0.7569
    0.4824    0.5490    0.5843
    0.6549    0.7216    0.6510
    0.9412    0.9216    0.9059
    0.9804    0.7608    0.6863];
CListT = CListT3;
for i = 1:size(dataMat, 2)
    CC.setSquareT_N(i, 'FaceColor',CListT(i,:), 'EdgeColor',[0,0,0])
end
% 修改弦颜色(Modify chord color)
for i = 1:size(dataMat, 1)
    for j = 1:size(dataMat, 2)
        CC.setChordMN(i,j, 'FaceColor',CListT(j,:), 'FaceAlpha',.9, 'EdgeColor',[0,0,0])
    end
end


% 修改下方方块颜色(Modify the color of the blocks below)
logFC = sort(rand(1,14))*6 - 3;
for i = 1:size(dataMat, 1)
    CC.setSquareF_N(i, 'CData',logFC(i), 'FaceColor','flat', 'EdgeColor',[0,0,0])
end
CMap = [     0         0    1.0000; 0.0645    0.0645    1.0000; 0.1290    0.1290    1.0000; 0.1935    0.1935    1.0000
        0.2581    0.2581    1.0000; 0.3226    0.3226    1.0000; 0.3871    0.3871    1.0000; 0.4516    0.4516    1.0000
        0.5161    0.5161    1.0000; 0.5806    0.5806    1.0000; 0.6452    0.6452    1.0000; 0.7097    0.7097    1.0000
        0.7742    0.7742    1.0000; 0.8387    0.8387    1.0000; 0.9032    0.9032    1.0000; 0.9677    0.9677    1.0000
        1.0000    0.9677    0.9677; 1.0000    0.9032    0.9032; 1.0000    0.8387    0.8387; 1.0000    0.7742    0.7742
        1.0000    0.7097    0.7097; 1.0000    0.6452    0.6452; 1.0000    0.5806    0.5806; 1.0000    0.5161    0.5161
        1.0000    0.4516    0.4516; 1.0000    0.3871    0.3871; 1.0000    0.3226    0.3226; 1.0000    0.2581    0.2581
        1.0000    0.1935    0.1935; 1.0000    0.1290    0.1290; 1.0000    0.0645    0.0645; 1.0000         0         0];
colormap(CMap);
try clim([-3,3]),catch,end
try caxis([-3,3]),catch,end

CBHdl = colorbar();
CBHdl.Position = [0.74,0.25,0.02,0.2];

% =========================================================================
% 交换XY轴(Swap XY axis)
patchHdl = findobj(gca, 'Type','patch');
for i = 1:length(patchHdl)
    tX = patchHdl(i).XData;
    tY = patchHdl(i).YData;
    patchHdl(i).XData = tY;
    patchHdl(i).YData = - tX;
end
txtHdl = findobj(gca, 'Type','text');
for i = 1:length(txtHdl)
    txtHdl(i).Position([1,2])= [1,-1].*txtHdl(i).Position([2,1]);
    if txtHdl(i).Position(1)< 0
        txtHdl(i).HorizontalAlignment = 'right';
    else
        txtHdl(i).HorizontalAlignment = 'left';
    end
end
lineHdl = findobj(gca, 'Type','line');
for i = 1:length(lineHdl)
    tX = lineHdl(i).XData;
    tY = lineHdl(i).YData;
    lineHdl(i).XData = tY;
    lineHdl(i).YData = - tX;
end
% =========================================================================

txtHdl = findobj(gca, 'Type','text');
for i = 1:length(txtHdl)
    if txtHdl(i).Position(1)> 0
        txtHdl(i).Visible = 'off';
    end
end

text(1.25,-.15, 'LogFC', 'FontSize',16)
text(1.25,1, 'Terms', 'FontSize',16)

patchHdl = [];
for i = 1:size(dataMat, 2)
    patchHdl(i)= fill([10,11,12],[10,13,13], CListT(i,:), 'EdgeColor',[0,0,0]);
end
lgdHdl = legend(patchHdl, colName, 'Location','best', 'FontSize',14, 'FontName','Cambria', 'Box','off');
lgdHdl.Position = [.735,.53,.167,.27];
lgdHdl.ItemTokenSize = [18,8];
弦图 11
这些美丽大方的弦图居然都是用MATLAB画的?
rng(2)
dataMat = rand([12,12]);
dataMat(dataMat < .85)= 0;
dataMat(7,:)= 1.*(rand(1,12)+.1);
dataMat(11,:)= .6.*(rand(1,12)+.1);
dataMat(12,:)= [2.*(rand(1,10)+.1), 0, 0];

CList = [repmat([49,49,49],[10,1]); 235,28,34; 19,146,241]./255;

figure('Units','normalized', 'Position',[.02,.05,.6,.85])
BCC = biChordChart(dataMat, 'Arrow','off', 'CData',CList);
BCC = BCC.draw();

% 添加刻度
BCC.tickState('on')

% 修改字体,字号及颜色
BCC.setFont('FontName','Cambria', 'FontSize',17)

% 修改弦颜色(Modify chord color)
for i = 1:size(dataMat, 1)
    for j = 1:size(dataMat, 2)
        if dataMat(i,j)> 0
            BCC.setChordMN(i,j, 'FaceAlpha',.78, 'EdgeColor',[0,0,0])
        end
    end
end

% 修改方块颜色(Modify the color of the blocks)
for i = 1:size(dataMat, 1)
    BCC.setSquareN(i, 'EdgeColor',[0,0,0], 'LineWidth',2)
end
弦图 12
这些美丽大方的弦图居然都是用MATLAB画的?
dataMat = rand([9,9]);
dataMat(dataMat > .7)= 0;
dataMat(eye(9)== 1)=(rand([1,9])+.2).*3;

CList = [0.85,0.23,0.24
0.96,0.39,0.18
0.98,0.63,0.22
0.99,0.80,0.26
0.70,0.76,0.21
0.24,0.74,0.71
0.27,0.65,0.84
0.09,0.37,0.80
0.64,0.40,0.84];

figure('Units','normalized', 'Position',[.02,.05,.6,.85])
BCC = biChordChart(dataMat, 'Arrow','on', 'CData',CList);
BCC = BCC.draw();

% 添加刻度、刻度标签
BCC.tickState('on')

% 修改字体,字号及颜色
BCC.setFont('FontName','Cambria', 'FontSize',17)


% 修改弦颜色(Modify chord color)
for i = 1:size(dataMat, 1)
    for j = 1:size(dataMat, 2)
        if dataMat(i,j)> 0
            BCC.setChordMN(i,j, 'FaceAlpha',.7)
        end
    end
end
弦图 13
这些美丽大方的弦图居然都是用MATLAB画的?
rng(2)

dataMat = randi([1,40], [7,4]);
dataMat(rand([7,4])< .1)= 0;

colName = compose('MATLAB%d', 1:4);
rowName = compose('SL%d', 1:7);

figure('Units','normalized', 'Position',[.02,.05,.7,.85])
CC = chordChart(dataMat, 'rowName',rowName, 'colName',colName, 'Sep',1/80, 'LRadius',1.32);
CC = CC.draw();
% 修改上方方块颜色(Modify the color of the blocks above)
CListT = [0.49,0.64,0.53
    0.75,0.39,0.35
    0.80,0.74,0.42
    0.40,0.55,0.66];
for i = 1:size(dataMat, 2)
    CC.setSquareT_N(i, 'FaceColor',CListT(i,:))
end
% 修改下方方块颜色(Modify the color of the blocks below)
CListF = [0.91,0.91,0.97
    0.62,0.95,0.66
    0.91,0.61,0.20
    0.54,0.45,0.82
    0.99,0.76,0.81
    0.91,0.85,0.83
    0.53,0.42,0.43];
for i = 1:size(dataMat, 1)
    CC.setSquareF_N(i, 'FaceColor',CListF(i,:))
end
% 修改弦颜色(Modify chord color)
for i = 1:size(dataMat, 1)
    for j = 1:size(dataMat, 2)
        CC.setChordMN(i,j, 'FaceColor',CListT(j,:), 'FaceAlpha',.46)
    end
end

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


% 绘制图例(Draw legend)
scatterHdl = scatter(10.*ones(size(dataMat,1)),10.*ones(size(dataMat,1)), ...
                     55, 'filled');
for i = 1:length(scatterHdl)
    scatterHdl(i).CData = CListF(i,:);
end
lgdHdl = legend(scatterHdl, rowName, 'Location','best', 'FontSize',16, 'FontName','Cambria', 'Box','off');
set(lgdHdl, 'Position',[.77,.38,.1658,.27])
弦图 14
这些美丽大方的弦图居然都是用MATLAB画的?
rng(6)
dataMat = randi([1,20], [8,8]);
dataMat(dataMat > 5)= 0;
dataMat(1,:)= randi([1,15], [1,8]);
dataMat(1,8)= 40;
dataMat(8,8)= 60;

dataMat = dataMat./sum(sum(dataMat));

CList = [0.33,0.53,0.86
    0.94,0.50,0.42
    0.92,0.58,0.30
    0.59,0.47,0.45
    0.37,0.76,0.82
    0.82,0.68,0.29
    0.75,0.62,0.87
    0.43,0.69,0.57];
NameList={'CHORD', 'CHART', 'AND', 'BICHORD',...
    'CHART', 'MADE', 'BY', 'SLANDARER'};

figure('Units','normalized', 'Position',[.02,.05,.6,.85])
BCC = biChordChart(dataMat, 'Arrow','on', 'CData',CList, 'Sep',1/12, 'Label',NameList, 'LRadius',1.33);
BCC = BCC.draw();

% 添加刻度
BCC.tickState('on')

% 修改弦颜色(Modify chord color)
for i = 1:size(dataMat, 1)
    for j = 1:size(dataMat, 2)
        if dataMat(i,j)> 0
            BCC.setChordMN(i,j, 'FaceAlpha',.7, 'EdgeColor',CList(i,:)./1.1)
        end
    end
end
% 修改方块颜色(Modify the color of the blocks)
for i = 1:size(dataMat, 1)
    BCC.setSquareN(i, 'EdgeColor',CList(i,:)./1.7)
end

% 修改字体,字号及颜色
BCC.setFont('FontName','Cambria', 'FontSize',17)
BCC.tickLabelState('on')
BCC.setTickFont('FontName','Cambria', 'FontSize',9)


% 调整数值字符串格式
% Adjust numeric string format
BCC.setTickLabelFormat(@(x)[num2str(round(x*100)),'%'])
弦图 15
这些美丽大方的弦图居然都是用MATLAB画的?
CList = [0.81,0.72,0.83
0.69,0.82,0.89
0.17,0.44,0.64
0.70,0.85,0.55
0.03,0.57,0.13
0.97,0.67,0.64
0.84,0.09,0.12
1.00,0.80,0.46
0.98,0.52,0.01
    ];

figure('Units','normalized', 'Position',[.02,.05,.53,.85], 'Color',[1,1,1])

% =========================================================================
ax1 = axes('Parent',gcf, 'Position',[0,1/2,1/2,1/2]);
dataMat = rand([9,9]);
dataMat(dataMat > .4)= 0;
BCC = biChordChart(dataMat, 'Arrow','on', 'CData',CList);
BCC = BCC.draw();
BCC.tickState('on')
BCC.setFont('Visible','off')
% 修改弦颜色(Modify chord color)
for i = 1:size(dataMat, 1)
    for j = 1:size(dataMat, 2)
        if dataMat(i,j)> 0
            BCC.setChordMN(i,j, 'FaceAlpha',.6)
        end
    end
end
text(-1.2,1.2, 'a', 'FontName','Times New Roman', 'FontSize',35)

% =========================================================================
ax2 = axes('Parent',gcf, 'Position',[1/2,1/2,1/2,1/2]);
dataMat = rand([9,9]);
dataMat(dataMat > .4)= 0;
dataMat = dataMat.*(1:9);
BCC = biChordChart(dataMat, 'Arrow','on', 'CData',CList);
BCC = BCC.draw();
BCC.tickState('on')
BCC.setFont('Visible','off')
% 修改弦颜色(Modify chord color)
for i = 1:size(dataMat, 1)
    for j = 1:size(dataMat, 2)
        if dataMat(i,j)> 0
            BCC.setChordMN(i,j, 'FaceAlpha',.6)
        end
    end
end
text(-1.2,1.2, 'b', 'FontName','Times New Roman', 'FontSize',35)

% =========================================================================
ax3 = axes('Parent',gcf, 'Position',[0,0,1/2,1/2]);
dataMat = rand([9,9]);
dataMat(dataMat > .4)= 0;
dataMat = dataMat.*(1:9).';
BCC = biChordChart(dataMat, 'Arrow','on', 'CData',CList);
BCC = BCC.draw();
BCC.tickState('on')
BCC.setFont('Visible','off')
% 修改弦颜色(Modify chord color)
for i = 1:size(dataMat, 1)
    for j = 1:size(dataMat, 2)
        if dataMat(i,j)> 0
            BCC.setChordMN(i,j, 'FaceAlpha',.6)
        end
    end
end
text(-1.2,1.2, 'c', 'FontName','Times New Roman', 'FontSize',35)

% =========================================================================
ax4 = axes('Parent',gcf, 'Position',[1/2,0,1/2,1/2]);
ax4.XColor = 'none'; ax4.YColor = 'none';
ax4.XLim = [-1,1]; ax4.YLim = [-1,1];
hold on

NameList = {'Food supply', 'Biodiversity', 'Water quality regulation', ...
            'Air quality regulation', 'Erosion control', 'Carbon storage', ...
            'Water retention', 'Recreation', 'Soil quality regulation'};
patchHdl = [];
for i = 1:size(dataMat, 2)
    patchHdl(i)= fill([10,11,12],[10,13,13], CList(i,:), 'EdgeColor',[0,0,0]);
end
lgdHdl = legend(patchHdl, NameList, 'Location','best', 'FontSize',14, 'FontName','Cambria', 'Box','off');
lgdHdl.Position = [.625,.11,.255,.27];
lgdHdl.ItemTokenSize = [18,8];
弦图 16
这些美丽大方的弦图居然都是用MATLAB画的?


这些美丽大方的弦图居然都是用MATLAB画的?

dataMat = rand([15,15]);
dataMat(dataMat > .2)= 0;

CList = [ 75,146,241; 252,180, 65; 224, 64, 10;   5,100,146; 191,191,191;
          26, 59,105; 255,227,130;  18,156,221; 202,107, 75;   0, 92,219;
         243,210,136;  80, 99,129; 241,185,168; 224,131, 10; 120,147,190]./255;
CListC = [54,69,92]./255;
CList = CList.*.6 + CListC.*.4;

figure('Units','normalized', 'Position',[.02,.05,.6,.85])
BCC = biChordChart(dataMat, 'Arrow','on', 'CData',CList);
BCC = BCC.draw();

% 添加刻度
BCC.tickState('on')

% 修改字体,字号及颜色
BCC.setFont('FontName','Cambria', 'FontSize',17, 'Color',[0,0,0])

% 修改弦颜色(Modify chord color)
for i = 1:size(dataMat, 1)
    for j = 1:size(dataMat, 2)
        if dataMat(i,j)> 0
            BCC.setChordMN(i,j, 'FaceColor',CListC ,'FaceAlpha',.07)
        end
    end
end
[~, N] = max(sum(dataMat > 0, 2));
for j = 1:size(dataMat, 2)
    BCC.setChordMN(N,j, 'FaceColor',CList(N,:),'FaceAlpha',.6)
end
gitee仓库
大家可以去Gitee仓库获取代码整合包:

这些美丽大方的弦图居然都是用MATLAB画的?
https://gitee.com/slandarer/matlab-chord-chart
这些美丽大方的弦图居然都是用MATLAB画的?
chordChart 弦图 fileexchange
Zhaoxu Liu / slandarer(2023). chord chart 弦图(https://www.mathworks.com/matlabcentral/fileexchange/116550-chord-chart), MATLAB Central File Exchange. 检索来源 2023/4/1.

biChordChart 有向弦图 fileexchange
Zhaoxu Liu / slandarer(2023). Digraph chord chart 有向弦图(https://www.mathworks.com/matlabcentral/fileexchange/121043-digraph-chord-chart), MATLAB Central File Exchange. 检索来源 2023/4/1.

未经许可代码不能做任何商务用途,引用可以引用上述fileexchange链接,引用时可改变引用文本格式,但至少应包含链接。


相关栏目:『内外互动
“和来访者发生了关系,我很后悔” |心理咨询师N博士的沦陷 2024-04-28 [11]
美国确实有一点做得比中国好,只有在美国生活过的人才能体会 2024-04-23 [184]
日本为什么没有首都? 2024-04-23 [110]
一座绕不过去的现代性界碑 | 马克斯·韦伯诞辰160周年 2024-04-21 [125]
终身未婚闭门不出,留下千余首诗歌,她是美国文学史最难解的谜 2024-04-20 [186]
一篇分析世界格局最透彻的雄文! 2024-04-20 [301]
清理世界名画最好的方式,竟然是吐口水?! 2024-04-20 [103]
10万个中国弃婴,却在美国被宠爱! 2024-04-17 [273]
耶伦的帆布包,美国对华价值观外交的回光返照 2024-04-16 [217]
耶伦访华,美国的价值观外交与中国的皈依者 2024-04-16 [217]
相关栏目更多文章
最新图文:
:引力波天文台或有助搜寻暗物质粒子 :Sail Through the Mist - SoCal Innovation Forum 2019(10/5) 游天龙:《唐人街》是如何炼成的:UCLA社会学教授周敏的学术之路 :“为什么海外华人那么爱国,但是让他回国却不愿意?...“ :学术出版巨头Elsevier 彻查433名审稿人“强迫引用”黑幕 :中国336个国家重点实验室布局 :中澳政府联合出手打击洗钱和逃税漏税 大量中国居民海外账户遭冻结 :摄影师苏唐诗与寂寞百年的故宫对话6年,3万张照片美伦美奂
更多最新图文
更多《即时通讯》>>
 
打印本文章
 
您的名字:
电子邮件:
留言内容:
注意: 留言内容不要超过4000字,否则会被截断。
未 审 核:  是
  
关于我们联系我们申请加入后台管理设为主页加入收藏
美国华裔教授专家网版权所有,谢绝拷贝。如欲选登或发表,请与美国华裔教授专家网联系。
Copyright © 2024 ScholarsUpdate.com. All Rights Reserved.