MATLABを用いたExcelデータのグラフ作成および画像保存プログラム_1(MATLAB R2021b)

0.はじめに

この内容はあくまで自身の備忘録として残しています。
プログラムを学びたい方は、他のリソースを参照することをお勧めします。

1.目的

このプログラムは、Excelファイル(test.xlsx)内の各シートのデータを基に、特定の列の値をグラフ化し、画像ファイルとして保存することです。
実行ファイルとExcelファイルは、同一ディレクトリにあります。
今回はシート4つにある1列目と4列目を抽出し、x軸とy軸に使用しています。
また、全シートの最大値も自動的に得られ、10の位で丸め込んでいます。データの例は下記の通りです(Column1は0.01ずつ増えていき、あとの列は基本乱数にしました。また、最大値と最小値が適切に得られているか確認するため、Column4に関しては部分的に手動でパラメータを変更しています)。

データの例

2.プログラム

%% Clear
% ワークスペースをクリア
clear;

%%
% 数値を10の位で丸め込む関数
roundToNearestTen = @(x) ceil(x / 10) * 10;
roundDownToNearestTen = @(x) floor(x / 10) * 10;

%%
% Excelファイルの情報を取得
[status, sheets] = xlsfinfo('test.xlsx');
numSheets = numel(sheets);
extention_jpg = '.jpg';

% 初期化
maxValue_x = -Inf;
maxValue_y = -Inf;
minValue_y = Inf;

% 各シートにループでアクセスして最大値と最小値を取得
for i = 1:numSheets
    sheetName = sheets{i};
    data = xlsread('test.xlsx', sheetName);
    
    % シート内の最大値と最小値を取得
    firstValue = data(1, 1);
    sheetMax_x = max(data(1:end,1)-firstValue);
    sheetMax_y = max(data(1:end,4));
    sheetMin_y = min(data(1:end,4));
    
    % 全シートの中での最大値を更新
    if sheetMax_x > maxValue_x
        maxValue_x = sheetMax_x;
    end
    if sheetMax_y > maxValue_y
        maxValue_y = sheetMax_y;
    end
    if sheetMin_y < minValue_y
        minValue_y = sheetMin_y;
    end
end

% 最大値と最小値を10の位で丸め込む
maxValue_x = roundToNearestTen(maxValue_x);
maxValue_y = roundToNearestTen(maxValue_y);
minValue_y = roundDownToNearestTen(minValue_y);

% 各シートにループでアクセスしてグラフを作成
for i = 1:numSheets
    sheetName = sheets{i};
    data = xlsread('test.xlsx', sheetName);

    % データの最初の値を基準に調整
    firstValue = data(1, 1);
    Column1 = data(1:end,1);
    Column1 = Column1 - firstValue;

    Column4 = data(1:end,4);

    %%  グラフ作成
    figure('WindowState','maximized')
    plot(Column1,Column4,'k','MarkerSize',20,'LineWidth',1);
    xlabel('Column1','FontName','Times','FontSize',24,'FontWeight','bold')
    ylabel('Column4','FontName','Times','FontSize',24,'FontWeight','bold')
    xlim([0 maxValue_x]);
    ylim([minValue_y maxValue_y]);
    ax = gca;
    ax.FontSize = 20;
    ax.FontName = 'Times';
    ax.FontWeight = 'bold';
    pbaspect([3 1 1])

    % 画像ファイルとして保存
    FileName = strcat(sheetName,extention_jpg);
    saveas(gcf,FileName)
    close
end

%%  ファイル移動
% Graphフォルダを作成し、画像ファイルを移動
mkdir Graph
movefile('*.jpg', 'Graph')

ワークスペースをクリア:
clearコマンドでワークスペースをクリアします。

関数の定義:
数値を10の位で丸め込む関数を定義します。

Excelファイルの情報取得:
xlsfinfo関数でExcelファイルのシート情報を取得します。

初期化:
最大値と最小値の初期化を行います。

各シートのデータ処理:
各シートにループでアクセスし、データを読み込みます。
シート内の最大値と最小値を取得し、全シートの中での最大値と最小値を更新します。

最大値と最小値の丸め込み:
取得した最大値と最小値を10の位で丸め込みます。

グラフ作成:
各シートのデータを基にグラフを作成します。
グラフの軸ラベルや範囲を設定し、画像ファイルとして保存します。

ファイル移動:
作成した画像ファイルを「Graph」フォルダに移動します。

3.結果

4つのグラフが得られフォルダにまとめられました。スケーリングも問題ないと思います。x軸の丸め込みは改善できそうですが。

Sheet1
Sheet2
Sheet3
Sheet4


いいなと思ったら応援しよう!