分组散点矩阵(`gplotmatrix`)

分组散点矩阵(gplotmatrix)

03_统计与矩阵 5 张 MATLAB R2023b 100 mm 宽 @ 300 dpi

这个方法适合什么

散点矩阵按类别着色,能看出组间的分离程度。适合:不同台区、不同型号设备的多变量特征对比与可分性判断。

电气场景

1 台区三变量分组散点矩阵

2 光伏逆变器四变量分组散点矩阵

3 储能电池四变量分组散点矩阵

4 电缆状态四变量分组散点矩阵

5 负荷特性四变量分组散点矩阵

代码

脚本 p3_stats_matrix.m 中对应 gplotmatrix 的一段,SEL 用于选择只跑某几个方法。

if any(SEL==9)
    rng(909);

    % ---- 9.1 台区三变量分组散点矩阵 ----
    nm  = {'负载率 / %','功率因数','线损率 / %'};
    gn  = {'居民台区','商业台区','工业台区'};
    mu  = [42 0.93 2.6; 62 0.95 2.2; 78 0.91 3.4];
    N = 60; X = []; g = strings(0,1);
    for k = 1:3
        X = [X; repmat(mu(k,:),N,1) + [7 0.018 0.35].*randn(N,3)]; %#ok<AGROW>
        g = [g; repmat(gn{k},N,1)]; %#ok<AGROW>
    end
    f  = ml_fig(PP,112,100);
    figure(f);
    [H,AX,BigAx] = gplotmatrix(X,[],categorical(g),C(1:3,:),'o',3);
    for i = 1:3, for j = 1:3
        if i ~= j, set(H(i,j),'MarkerSize',2.6); end
    end, end
    for k = 1:numel(AX), set(AX(k),'LineWidth',0.5); end
    for j = 1:3, xlabel(AX(3,j),ml_tx(nm{j})); end
    for i = 1:3, ylabel(AX(i,1),ml_tx(nm{i})); end
    set(BigAx,'Visible','off');
    lg = findobj(f,'Type','Legend');
    lg.String = ml_tx(gn); lg.Location = 'northwest';
    ml_style_legend(lg,PP);
    yl = ylim(AX(1,1)); ylim(AX(1,1),[yl(1) yl(2)*1.55]);   % 抬高左上直方留图例空白带
    save_png(f,FIGD,'台区三变量分组散点矩阵');

    % ---- 9.2 光伏逆变器四变量分组散点矩阵 ----
    nm  = {'辐照度 / (W·m^{-2})','组件温度 / °C','出力 / kW','效率 / %'};
    gn  = {'晴天','多云'};
    N = 70; X = []; g = strings(0,1);
    G  = [720+130*randn(N,1); 320+110*randn(N,1)];
    Tc = 22 + 0.028*G + 3*randn(2*N,1);
    Pw = 0.48*G.*(1-0.0038*(Tc-25))/1000*500;
    et = 17.2 - 0.042*(Tc-25) + 0.3*randn(2*N,1);
    X  = [G Tc Pw et];
    g  = [repmat(string(gn{1}),N,1); repmat(string(gn{2}),N,1)];
    f  = ml_fig(PP,130,112);
    figure(f);
    [H,AX,BigAx] = gplotmatrix(X,[],categorical(g),C([1 2],:),'o',3);
    for i = 1:4, for j = 1:4
        if i ~= j, set(H(i,j),'MarkerSize',2.4); end
    end, end
    for k = 1:numel(AX), set(AX(k),'LineWidth',0.5); end
    for j = 1:4, xlabel(AX(4,j),ml_tx(nm{j})); end
    for i = 1:4, ylabel(AX(i,1),ml_tx(nm{i})); end
    set(BigAx,'Visible','off');
    lg = findobj(f,'Type','Legend');
    lg.String = ml_tx(gn); lg.Location = 'northwest';
    ml_style_legend(lg,PP);
    yl = ylim(AX(1,1)); ylim(AX(1,1),[yl(1) yl(2)*1.55]);
    save_png(f,FIGD,'光伏逆变器四变量分组散点矩阵');

    % ---- 9.3 储能电池四变量分组散点矩阵 ----
    nm  = {'SOC / %','功率 / kW','温度 / °C','容量保持率 / %'};
    gn  = {'0.5C 倍率','1C 倍率','2C 倍率'};
    N = 55; X = []; g = strings(0,1);
    muS = [55 60 28 97.5; 50 110 34 95.2; 45 190 42 92.1];
    for k = 1:3
        X = [X; repmat(muS(k,:),N,1) + [9 12 2.4 0.8].*randn(N,4)]; %#ok<AGROW>
        g = [g; repmat(gn{k},N,1)]; %#ok<AGROW>
    end
    f  = ml_fig(PP,130,112);
    figure(f);
    [H,AX,BigAx] = gplotmatrix(X,[],categorical(g),C([3 5 6],:),'o',3);
    for i = 1:4, for j = 1:4
        if i ~= j, set(H(i,j),'MarkerSize',2.4); end
    end, end
    for k = 1:numel(AX), set(AX(k),'LineWidth',0.5); end
    for j = 1:4, xlabel(AX(4,j),ml_tx(nm{j})); end
    for i = 1:4, ylabel(AX(i,1),ml_tx(nm{i})); end
    set(BigAx,'Visible','off');
    lg = findobj(f,'Type','Legend');
    lg.String = ml_tx(gn); lg.Location = 'northwest';
    ml_style_legend(lg,PP);
    yl = ylim(AX(1,1)); ylim(AX(1,1),[yl(1) yl(2)*1.55]);
    save_png(f,FIGD,'储能电池四变量分组散点矩阵');

    % ---- 9.4 电缆状态四变量分组散点矩阵 ----
    nm  = {'电流 / A','温升 / K','绝缘电阻 / MΩ','介损 / %'};
    gn  = {'10 kV 电缆','35 kV 电缆','110 kV 电缆'};
    N = 55; X = []; g = strings(0,1);
    muC = [185 32 2600 0.24; 240 41 3400 0.19; 320 48 4600 0.15];
    for k = 1:3
        X = [X; repmat(muC(k,:),N,1) + [22 3.5 260 0.028].*randn(N,4)]; %#ok<AGROW>
        g = [g; repmat(gn{k},N,1)]; %#ok<AGROW>
    end
    f  = ml_fig(PP,130,112);
    figure(f);
    [H,AX,BigAx] = gplotmatrix(X,[],categorical(g),C([2 4 1],:),'o',3);
    for i = 1:4, for j = 1:4
        if i ~= j, set(H(i,j),'MarkerSize',2.4); end
    end, end
    for k = 1:numel(AX), set(AX(k),'LineWidth',0.5); end
    for j = 1:4, xlabel(AX(4,j),ml_tx(nm{j})); end
    for i = 1:4, ylabel(AX(i,1),ml_tx(nm{i})); end
    set(BigAx,'Visible','off');
    lg = findobj(f,'Type','Legend');
    lg.String = ml_tx(gn); lg.Location = 'northwest';
    ml_style_legend(lg,PP);
    yl = ylim(AX(1,1)); ylim(AX(1,1),[yl(1) yl(2)*1.55]);
    save_png(f,FIGD,'电缆状态四变量分组散点矩阵');

    % ---- 9.5 负荷特性四变量分组散点矩阵 ----
    nm  = {'峰荷 / MW','谷荷 / MW','负荷率 / %','同时率 / %'};
    gn  = {'居民负荷','商业负荷','工业负荷','混合负荷'};
    N = 45; X = []; g = strings(0,1);
    muL = [12.5 6.8 0.62 0.78; 16.2 5.4 0.55 0.82; 22.8 14.6 0.74 0.91; 17.4 9.2 0.66 0.85];
    for k = 1:4
        X = [X; repmat(muL(k,:),N,1) + [1.6 1.1 0.035 0.030].*randn(N,4)]; %#ok<AGROW>
        g = [g; repmat(gn{k},N,1)]; %#ok<AGROW>
    end
    f  = ml_fig(PP,130,112);
    figure(f);
    [H,AX,BigAx] = gplotmatrix(X,[],categorical(g),C([1 2 3 4],:),'o',3);
    for i = 1:4, for j = 1:4
        if i ~= j, set(H(i,j),'MarkerSize',2.4); end
    end, end
    for k = 1:numel(AX), set(AX(k),'LineWidth',0.5); end
    for j = 1:4, xlabel(AX(4,j),ml_tx(nm{j})); end
    for i = 1:4, ylabel(AX(i,1),ml_tx(nm{i})); end
    set(BigAx,'Visible','off');
    lg = findobj(f,'Type','Legend');
    lg.String = ml_tx(gn); lg.Location = 'northwest';
    ml_style_legend(lg,PP);
    yl = ylim(AX(1,1)); ylim(AX(1,1),[yl(1) yl(2)*1.55]);
    save_png(f,FIGD,'负荷特性四变量分组散点矩阵');
end
posted @ 2026-11-09 00:05  小青蛙电气  阅读(2)  评论(0)    收藏  举报