三次元(XYZ)を1つの関数に置く

11 次查看(过去 30 天)
皓
2023-7-7
评论: 2023-8-2
図1
図2
図1の縦方向をY軸、横方向をX軸とし、CXVファイルをZ軸方向としています。
この(XYZ)を使ってA=(XYZ)のような1つの関数に置きたいです。
宜しくお願いします。

采纳的回答

交感神経優位なあかべぇ
下記にサンプルコードを作成しました。全てのCSVファイルのX,Yのそれぞれのデータ数は全部等しいことを前提にしています。
% サンプルとなるCSVファイルを作成
fileName = 'file_';
for i = 1 : 10
data = zeros(11,11);
data(1,2:end) = 0:9;
data(2:end,1) = 0:9;
data(2:end, 2:end) = reshape(1:100, 10, 10); % サンプルデータはとりあえず連番データを挿入
fileData = num2cell(data);
fileData{1,1} = 'y/x';
writecell(fileData, [fileName, num2str(i-1), '.CSV']);
end
fileData % CSVに保存したデータのひとつを表示
fileData = 11×11 cell array
{'y/x'} {[ 0]} {[ 1]} {[ 2]} {[ 3]} {[ 4]} {[ 5]} {[ 6]} {[ 7]} {[ 8]} {[ 9]} {[ 0]} {[ 1]} {[11]} {[21]} {[31]} {[41]} {[51]} {[61]} {[71]} {[81]} {[ 91]} {[ 1]} {[ 2]} {[12]} {[22]} {[32]} {[42]} {[52]} {[62]} {[72]} {[82]} {[ 92]} {[ 2]} {[ 3]} {[13]} {[23]} {[33]} {[43]} {[53]} {[63]} {[73]} {[83]} {[ 93]} {[ 3]} {[ 4]} {[14]} {[24]} {[34]} {[44]} {[54]} {[64]} {[74]} {[84]} {[ 94]} {[ 4]} {[ 5]} {[15]} {[25]} {[35]} {[45]} {[55]} {[65]} {[75]} {[85]} {[ 95]} {[ 5]} {[ 6]} {[16]} {[26]} {[36]} {[46]} {[56]} {[66]} {[76]} {[86]} {[ 96]} {[ 6]} {[ 7]} {[17]} {[27]} {[37]} {[47]} {[57]} {[67]} {[77]} {[87]} {[ 97]} {[ 7]} {[ 8]} {[18]} {[28]} {[38]} {[48]} {[58]} {[68]} {[78]} {[88]} {[ 98]} {[ 8]} {[ 9]} {[19]} {[29]} {[39]} {[49]} {[59]} {[69]} {[79]} {[89]} {[ 99]} {[ 9]} {[10]} {[20]} {[30]} {[40]} {[50]} {[60]} {[70]} {[80]} {[90]} {[100]}
list = dir('*.CSV'); % CSVファイルの取り出し
filePath = fullfile(list(1).folder, list(1).name); % 一つ目のCSVファイルパスを取得
file1Data = readmatrix(filePath, 'Range', [2,2]); % データを示すセル(2行2列目)からデータの読み込み
csvData = zeros([size(file1Data), length(list)]); % データの初期化
csvData(:,:,1) = file1Data; % ひとつめのファイルのデータを挿入
for i = 2 : length(list) % 2ファイル目以降のファイル読み込みのためのループ文
filePath = fullfile(list(i).folder, list(i).name);
csvData(:,:,i) = readmatrix(filePath, 'Range', [2,2]); % CSVファイルのデータの代入
end
csvData(:,:,1) % 一つ目のファイルのデータを表示
ans = 10×10
1 11 21 31 41 51 61 71 81 91 2 12 22 32 42 52 62 72 82 92 3 13 23 33 43 53 63 73 83 93 4 14 24 34 44 54 64 74 84 94 5 15 25 35 45 55 65 75 85 95 6 16 26 36 46 56 66 76 86 96 7 17 27 37 47 57 67 77 87 97 8 18 28 38 48 58 68 78 88 98 9 19 29 39 49 59 69 79 89 99 10 20 30 40 50 60 70 80 90 100
  9 个评论
交感神経優位なあかべぇ
④ '^file_(\d+)\.'は正規表現です。^は文字列の先頭を指し、\dは数字、\d+は一つ以上連続した数値の文字列、\.は、.を指します。(正規表現で.は任意の文字を表すので、文字の.を表現するには\.になります。)
また、(\d+)の()はトークンを表します。
'once'は一回の一致のみの検索を表します。
'tokens'は正規表現で指定したトークンの文字列の抽出の指定になり、今回のトークンの対象は(\d+)の部分です。これにより、連続の数字の文字列(\d+)を抽出することができます。
sortの第2出力はソート結果の並べ替えインデックスを指します。
a = [3,2,1,5,4];
[data, sortIdx] = sort(a) % 出力1は昇順に並び替えたデータで、出力2はソート結果の並び替えインデックス
data = 1×5
1 2 3 4 5
sortIdx = 1×5
3 2 1 5 4
また、配列データのインデックスに並び替えたい数値配列を指定すると、その配列順にデータを並び替えることができます。
orderIdx = [3,2,1];
data = [1,2,3];
orderData = data(orderIdx)% orderIdxで指定した順序に並び替え
orderData = 1×3
3 2 1
この2つを組み合わせると、sortで指定した並び替え順序を他のデータに反映させることができます。
data = [3,2;1,2;2,7;6,8;5,11;4,100]%1列目の数値が昇順になるように行全体を並べ替えたい。
data = 6×2
3 2 1 2 2 7 6 8 5 11 4 100
[~, sortIdx] = sort(data(:,1));% 1列目の数値配列のソート結果のインデックス取得
sortData = data(sortIdx,:) %ソート結果のインデックスをもとに行の並び替え
sortData = 6×2
1 2 2 7 3 2 4 100 5 11 6 8
⑥ カラーのラベルについて、climでカラーの上下限値を設定できるので、全てのグラフでclim([0,100])を指定すれば、全て0~100の幅を持ったカラーバーに統一できます。(MATLAB R2022aより前のバージョンの場合はcaxisです。)
また、カラーの色の指定はcolormapでできます。カラーの色は標準でいくつか用意されています。(色を自作することも可)
サンプルを下記に書きました。
sample1 = peaks(0:9) .* 10; % サンプルデータ1の作成
[min(sample1(:)), max(sample1(:))] % data1の上下限の確認
ans = 1×2
0.0000 58.5913
sample2 = sample1 .* 2;% サンプルデータ2の作成。サンプル1より2倍大きい
colormap(turbo()); % カラーマップの色の指定 理想形に近そうな色を選択
contourf(0:9,0:9,sample1); % sample1のコンター図描画
clim([0,100]); % カラーマップの上下限値の指定
colorbar; % カラーバー表示
contourf(0:9,0:9,sample2);% sample2のコンター図描画
clim([0,100]);% カラーマップの上下限値の指定
colorbar;% カラーバー表示
皓
2023-8-2
コンター図を描くことができました。
追加で何度も何度も質問に答えてくださり、ありがとうございました。

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 構造体 的更多信息

产品


版本

R2022b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!