Main Content

可変サイズのプロットのタイルを表示するためのチャート クラス

次の例は、ユーザー データのサイズに応じてどのようなサイズも可能なプロットのタイルを作成するためのクラスを定義する方法を示します。チャートには、m 行 n 列の行列を受け入れるパブリックの Data プロパティがあります。チャートには、散布図とヒストグラムの n 行 n 列の正方形タイルが表示されます。散布図は、異なるデータ列を相互に対してプロットしたものを示します。ヒストグラムはデータの各列にある値の分布を表します。

このクラスの update メソッドは、ヒストグラムと散布図を再作成して、データの変更を反映します。レイアウトのグリッド サイズがデータのサイズと矛盾する場合、すべての座標軸が削除され、GridSize プロパティがデータのサイズと一致するように更新されます。次に、axes オブジェクトの新しいセットが作成されます。

クラスを定義するには、以下のコードをエディターにコピーし、書き込み可能なフォルダーに TrellisChart.m という名前で保存します。

classdef TrellisChart < matlab.graphics.chartcontainer.ChartContainer
   
    properties
        Data(:,:) {mustBeNumeric}
        ColNames(1,:) string 
        TitleText(1,:) string
    end
    
    methods (Access = protected)
        function setup(obj)
            % Use one toolbar for all of the axes
            axtoolbar(getLayout(obj),'default');
        end
        
        function update(obj)
            % Get the layout and store it as tcl
            tcl = getLayout(obj);
            numvars = size(obj.Data,2);
             
            % Reconfigure layout if needed
            if numvars ~= tcl.GridSize(1)
                % Delete layout contents to change the grid size
                delete(tcl.Children);
                if numvars>0
                    tcl.GridSize = [numvars numvars];
                    for i = 1:numvars^2
                        nexttile(tcl,i);
                    end
                end
            end
            
            % Populate the layout with the axes
            ax = gobjects(numvars,numvars);
            for col = 1:numvars
                for row = 1:numvars
                    % Get the axes at the current row/column
                    t = col + (row-1) * numvars;
                    ax(row,col)=nexttile(tcl,t);
                    if col==row
                        % On the diagonal, draw histograms
                        histogram(ax(row,col),obj.Data(:,col));
                        ylabel(ax(row,col),'Count')
                    else
                        % Off the diagonal, draw scatters
                        scatter(ax(row,col),obj.Data(:,col),...
                            obj.Data(:,row),'filled','MarkerFaceAlpha',0.6)
                        if length(obj.ColNames) >= row
                            ylabel(ax(row,col),obj.ColNames(row));
                        end
                    end
                    
                    if length(obj.ColNames) >= col
                        xlabel(ax(row,col),obj.ColNames(col));
                    end
                end
                
                % Link the x-axis for each column, so that panning or zooming
                % affects all axes in the column.
                linkaxes(ax(:,col),'x')
            end
            
            % Chart title
            title(tcl,obj.TitleText,'FontSize',16);
        end
    end
end

クラス ファイルを保存した後、チャートのインスタンスを作成します。

load patients
chartTitle = "Height, Weight, and Diastolic Blood Pressure";
c = TrellisChart('Data',[Height Weight Diastolic], ...
    'colNames', ["Height" "Weight" "Diastolic"],...
    'TitleText',chartTitle);

参考

関数

クラス

プロパティ

関連するトピック