可変サイズのプロットのタイルを表示するためのチャート クラス
次の例は、ユーザー データのサイズに応じてどのようなサイズも可能なプロットのタイルを作成するためのクラスを定義する方法を示します。チャートには、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);