このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
横長テーブルをページに収める
この例では、横長テーブルをレポートに収める方法を示します。
この例のデータは、テキサス州オースティンの交通カメラ データの cell 配列を含む mat ファイルです。この cell 配列には、カメラの位置、そのステータス、電源がオンになった日付などの情報が含まれています。
交通カメラ データの cell 配列を含む Traffic_data.mat ファイルは、現在の作業ディレクトリにあるものとします。要件は、テーブルのすべての列が、幅 8.5 インチ、長さ 11 インチの用紙に縦向きで収まるようにテーブルを印刷することです。
テーブルの作成:
レポートにテーブルを含めるには、mlreportgen.dom.FormalTable オブジェクトを使用します。このオブジェクトにはテーブル本体およびオプションのテーブル ヘッダーとテーブル フッターがあります。
まず、MATLAB cell 配列データを含む mat ファイルをワークスペースに読み込みます。cell 配列データを使用して DOM 形式的テーブル オブジェクトを作成します。テーブルを読みやすくするために、テーブルの見出しを太字に設定し、テーブルの列区切り文字とテーブル コンテンツの間に左余白スペースを追加します。
load('traffic_data.mat'); tbl_header = traffic_camera_data(1,:); traffic_camera_data(1,:) = []; formalTable = mlreportgen.dom.FormalTable(tbl_header,traffic_camera_data); formalTable.RowSep = "Solid"; formalTable.ColSep = "Solid"; formalTable.Border = "Solid"; formalTable.Header.TableEntriesStyle = [formalTable.Header.TableEntriesStyle,... {mlreportgen.dom.Bold(true)}]; formalTable.TableEntriesStyle = [formalTable.TableEntriesStyle,... {mlreportgen.dom.InnerMargin("2pt","2pt","2pt","2pt"),... mlreportgen.dom.WhiteSpace("preserve")}];
試行 1 回目: 幅 8.5 インチ、長さ 11 インチの既定の縦長ページに DOM 形式的テーブルを追加します。
長いクラス名を使用せずに済むよう、DOM およびレポートの API パッケージをインポートします。
import mlreportgen.dom.* import mlreportgen.report.*;
レポートのコンテンツを保持するコンテナーを作成します。
% To create a Word report, change the output type from "pdf" to "docx". rpt = Report("TrafficCameraDataPortrait","pdf");
"Traffic Cameras in Austin" というタイトルの章を作成します。
chapter = Chapter("Title","Traffic Cameras in Austin");
作成したテーブルを章に追加し、レポートに章を追加します。
add(chapter, formalTable); add(rpt, chapter); close(rpt);
結果: 生成されたレポートにはテーブルが含まれていますが、テーブルの列が狭すぎます。テーブル全体を縦長のページに収めようとすると、判読できないテーブルが作成されてしまいます。
試行 2 回目: 幅 11 インチ、長さ 8.5 インチの横長のページに、横長テーブルを収めます。
import mlreportgen.dom.* import mlreportgen.report.*; import mlreportgen.utils.* rpt = Report("TrafficCameraDataLandscape","pdf"); chapter = Chapter("Title","Traffic Cameras in Austin");
レポートの横方向レイアウトを true に設定します。テーブルを章に追加します。
rpt.Layout.Landscape = true; add(chapter,formalTable); add(rpt,chapter); close(rpt);
結果: 横向きのレイアウトは縦向きのページ レポートよりも良いですが、多くの列が判読できず、テーブルも読みにくくなっています。
試行 3 回目: Report Generator TableSlicer ユーティリティを使用して、入力テーブルを複数のスライスにスライスします。その MaxCols プロパティは、テーブル スライスごとの最大列数を指定します。
まず、テーブルを 2 つのスライスに分割し、既定の幅 8.5 インチ×長さ 11 インチの縦長の用紙に印刷してみます。
import mlreportgen.dom.* import mlreportgen.report.*; import mlreportgen.utils.* rpt = Report("TrafficCameraDataSlicing-1","pdf"); chapter = Chapter("Title","Traffic Cameras in Austin");
ここで、テーブル スライサー オブジェクトを作成し、入力として形式的テーブルを指定します。入力テーブルには 18 個の列があるため、2 つのスライスを作成するには、MaxCols プロパティを 9 に設定します。
テーブル スライサー ユーティリティには、入力テーブルをスライスして mlreportgen.utils.TableSlice オブジェクトを生成するスライス メソッドがあります。これらのオブジェクトには、スライスされたテーブルと、元の入力テーブルの開始列インデックスと終了列インデックスが含まれます。
slicer = mlreportgen.utils.TableSlicer("Table",formalTable,"MaxCols",9); slices = slicer.slice();
開始インデックスと終了インデックスを使用して、カスタマイズしたタイトルを作成します。次に、カスタマイズしたスライス テーブルのタイトルとテーブル スライスを章に追加します。
for slice = slices str = sprintf("From column %d to column %d",slice.StartCol,slice.EndCol); para = Paragraph(str); para.Bold = true; para.Style = [para.Style,{KeepWithNext(true),... OuterMargin("0pt","0pt","5pt","0pt")}]; add(chapter,para); add(chapter,slice.Table); end
レポートを生成して表示します。
add(rpt,chapter); close(rpt);
結果: 出力は最初の 2 回の試行よりも優れていますが、テーブルのスライスは読みにくく、互いに切り離されています。
試行 4 回目: これまでの試行の出力を基に、MaxCols 値を減らして 4 つのテーブル スライスを作成します。すべてのスライスで列を繰り返すには、RepeatCols プロパティを使用します。4 つのスライスすべてを接続するには、RepeatCols プロパティの値を 1 に設定し、すべてのテーブル スライスで Camera ID 列が繰り返されるようにします。
import mlreportgen.dom.* import mlreportgen.report.*; import mlreportgen.utils.* rpt = Report("TrafficCameraDataSlicing-2","pdf"); chapter = Chapter("Title","Traffic Cameras in Austin");
MaxCols 値を 6 に設定し、RepeatCols 値を 1 に設定します。
slicer = mlreportgen.utils.TableSlicer("Table",formalTable,"MaxCols",... 6,"RepeatCols",1); slices = slicer.slice();
開始インデックスと終了インデックスを使用して、カスタマイズしたタイトルを作成します。カスタマイズしたスライス テーブルのタイトルとテーブル スライスを章に追加します。
for slice = slices str = sprintf("Repeated Column Index: %d ,SlicedColumns: From column %d to column %d",... slicer.RepeatCols,slice.StartCol, slice.EndCol); para = Paragraph(str); para.Bold = true; para.Style = [para.Style,{KeepWithNext(true),... OuterMargin("0pt","0pt","5pt","0pt")}]; add(chapter,para); add(chapter,slice.Table); end
レポートを生成して表示します。
add(rpt,chapter); close(rpt); rptview(rpt);
結果: 出力は読みやすく、テーブルを縦向きのページに印刷するという当初の要件を満たしています。入力テーブルのスタイルにより、太字のヘッダーと内側の余白がすべてのテーブル スライスで保持されています。
テーブル タイルは、読者がテーブル エントリのデータを理解できるようにカスタマイズされています。
Copyright 2018 The MathWorks, Inc