MATLAB | 図面再彫刻 (10) | 相関係数ヒートマップ図面を45度回転

このような三角相関ヒートマップは論文でよく見られますが、このようなヒートマップは描画するスペースがより節約されます。

この問題では、三角形のヒート マップを描画する方法を説明します。描画効果は次のとおりです。

チュートリアル部分は次のとおりです。


0 データ準備

ここでは、データのセットがランダムに生成され、相関係数が計算され、各変数名が与えられます。

% 随机生成数据
X=randn(20,20)+[(linspace(-1,2.5,20)').*ones(1,8),(linspace(.5,-.7,20)').*ones(1,5),(linspace(.9,-.2,20)').*ones(1,7)];
Data=corr(X1);
% 变量名列表
NameList=compose('Sl-%d',1:20);

1 座標エリア作成とヒートマップ描画

% 图窗及坐标区域
treeFig=figure('Position',[100,300,1000,600]);
ax=axes(treeFig);
ax.NextPlot='add';
ax.DataAspectRatio=[1,1,1];
ax.XColor='none';
ax.YColor='none';

% 热图绘制
sqX=[-1,0,1,0];
sqY=[0,1,0,-1];
for i=1:size(Data,1)
    for j=i:size(Data,1)
        fill(ax,sqX+(i-1)+(j-1),sqY-(i-1)+(j-1),Data(i,j),'EdgeColor','none')
    end
end
axis(ax,'tight')

2 カラーマッチングを調整し、カラーバーを作成する

たとえば、winterカラーマッチング:

% 设置颜色并绘制colorbar
clim(ax,[-1,1])
colormap(ax,'winter')
cbHdl=colorbar(ax);
cbHdl.Location='southoutside';
cbHdl.FontName='Times New Roman';
cbHdl.FontSize=12;

より豊富なカラー マッチングを行うには、slanCM ツールを使用できます:
https://slandarer.blog.csdn.net/article/details/127719784

例:

colormap(ax,slanCM(98))

3 テキストを追加する

下のテキストが必要な場合は、下のテキストの近くで変更できますtrue。右上のテキストが必要な場合も、同じことが当てはまります。

% 下方注释
if true
for i=1:size(Data,1)
    text(ax,-1/2+2*(i-1),-1/2,NameList{i}+" ",'FontSize',13,...
        'FontName','Times New Roman','HorizontalAlignment','right','Rotation',45)
end
end

% 右上方注释
if true
for i=1:size(Data,1)
    text(ax,-1/2+(i-1)+size(Data,1),-1/2+size(Data,1)-(i-1)," "+NameList{i},'FontSize',13,...
        'FontName','Times New Roman','HorizontalAlignment','left','Rotation',45)
end
end

4 樹状図

このセクションでは、Statistics and Machine Learning Toolbox ツールボックスをダウンロードする必要があります。

樹状図では行列を再配置する必要があるため、別のコードを記述します。

% Rotation 45-degree corr heatmap
% 随机生成数据
X=randn(20,20)+[(linspace(-1,2.5,20)').*ones(1,8),(linspace(.5,-.7,20)').*ones(1,5),(linspace(.9,-.2,20)').*ones(1,7)];
Data=corr(X);
% 变量名列表
NameList=compose('Sl-%d',1:20);

% 图窗及坐标区域
treeFig=figure('Position',[100,300,1000,600]);
ax=axes(treeFig);
ax.NextPlot='add';
ax.DataAspectRatio=[1,1,1];
ax.XColor='none';
ax.YColor='none';

% 获取树状图数据
fig1=figure();
tree1=linkage(Data,'average');
[~,~,order1]=dendrogram(tree1,0,'Orientation','top');
Data=Data(order1,order1);
NameList=NameList(order1);
LineSet1=fig1.Children.Children;
maxY1=0;
for i=1:length(LineSet1)
    maxY1=max(max(LineSet1(i).YData),maxY1);
end
for i=1:length(LineSet1)
    LineSet1(i).YData=LineSet1(i).YData./maxY1.*size(Data,1)./3;
end
for i=1:length(LineSet1)
    tX=(LineSet1(i).XData-1).*sqrt(2);
    tY=LineSet1(i).YData;
    nX=tX.*cos(pi/4)-tY.*sin(pi/4);
    nY=tX.*sin(pi/4)+tY.*cos(pi/4);
    plot(ax,nX,nY,'Color','k','LineWidth',1);
end
delete(fig1)

% 热图绘制
sqX=[-1,0,1,0];
sqY=[0,1,0,-1];
for i=1:size(Data,1)
    for j=i:size(Data,1)
        fill(ax,sqX+(i-1)+(j-1),sqY-(i-1)+(j-1),Data(i,j),'EdgeColor','none')
    end
end
axis(ax,'tight')

% 设置颜色并绘制colorbar
clim(ax,[-1,1])
colormap(ax,'winter')

cbHdl=colorbar(ax);
cbHdl.Location='southoutside';
cbHdl.FontName='Times New Roman';
cbHdl.FontSize=12;
colormap(ax,slanCM(100))

for i=1:size(Data,1)
    text(ax,-1/2+(i-1)+size(Data,1),-1/2+size(Data,1)-(i-1)," "+NameList{i},'FontSize',13,...
        'FontName','Times New Roman','HorizontalAlignment','left','Rotation',45)
end

slanCM を使用した後に他のカラー マッチングを表示します。

No.97 色合わせ

100番色合わせ

No.106 色合わせ

No.110 色合わせ

カラーNo.111

No.136 色合わせ

カラーNo.141

おすすめ

転載: blog.csdn.net/slandarer/article/details/131303854