グラフ画像から変換して得た指数グラフを形状を変えないまま対数グラフに変換したい
18 views (last 30 days)
Show older comments
グラフ画像を読み込んで、グラフを数値化する処理を書いています。
グラフ画像から数値を読み込み、指数グラフにするところまま完了しています。
しかし、画像のグラフは両対数グラフです。
そのため、数値化し指数グラフにしたものを形状を変えないまま対数グラフに変換したいです。
方法などについて、アドバイスいただけると幸いです。
よろしくお願いいたします。
1 Comment
Atsushi Ueno
on 23 Jan 2024
片対数でやってみましたが、こういう事でしょうか?
x = 0:0.01:9.9;
t = 2 .^ (-x);
y1 = 2 .^ x;
y2 = y1 ./ max(y1); % 0-1に正規化
y3 = y1 .^ y2;
tiledlayout(2,2);
nexttile; plot(x,y1);
nexttile; semilogy(x,y1); % 対数目盛りにすると形が変わる(当たり前)
nexttile; plot(x,y3);
nexttile; semilogy(x,y3); % 対数目盛にする前のy1と対数目盛にしたy3の形が変わらない
Answers (1)
交感神経優位なあかべぇ
on 28 Jan 2024
Edited: 交感神経優位なあかべぇ
on 28 Jan 2024
指数グラフの形状を変えないまま、両対数グラフに変換する例を作りました。
指数グラフの各軸のデータを両対数グラフのデータに変換(ChangeLiner2Log関数)し、描画しています。
p = 0:0.01:2*pi;
x = cos(p);
y = sin(p);
plot(x,y); % 例として円を作成
plotAxes = gca; % 円の座標オブジェクト取得
xlogLim = [1e-1, 1e2]; % 両対数グラフX軸の下限上限
ylogLim = [1e-2, 1e2]; % 両対数グラフY軸の下限上限
logXData = ChangeLiner2Log(plotAxes.XLim, x, xlogLim); % 両対数グラフに表示するXデータを作成
logYData = ChangeLiner2Log(plotAxes.YLim, y, ylogLim); % 両対数グラフに表示するXデータを作成
figure;
loglog(logXData, logYData); % 両対数グラフの表示
xlim(xlogLim); % 両対数グラフのX,Y軸の上下限値を設定
ylim(ylogLim);
% 指数データから対数データに変換
% linerLim : 指数グラフの軸の下限上限値
% linerData : 指数グラフのデータ
% logLim : 対数グラフの軸の下限上限値
function logData = ChangeLiner2Log(linerLim, linerData, logLim)
linerWidth = linerLim(2) - linerLim(1);% 指数グラフの上下限値の幅を計算
dataRatio = (linerData - linerLim(1)) ./ linerWidth; % 各データの指数グラフでの位置を割合で算出(0 ~ 1)
maxLog = (log(logLim(2)) / log(10)); % 対数グラフの上限値の対数を計算
minLog = (log(logLim(1)) / log(10)); % 対数グラフの下限値の対数を計算
logWidth = maxLog - minLog; % 対数の幅を計算
convertData = (logWidth * dataRatio) + minLog; % 指数グラフの位置から、対数の値を計算
logData = 10.^convertData; % 対数から値に変換
end
0 Comments
See Also
Categories
Find more on 2 次元および 3 次元プロット in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!