Clear Filters
Clear Filters

グラフ画像から変換し​て得た指数グラフを形​状を変えないまま対数​グラフに変換したい

42 views (last 30 days)
TRyo
TRyo on 23 Jan 2024
グラフ画像を読み込んで、グラフを数値化する処理を書いています。
グラフ画像から数値を読み込み、指数グラフにするところまま完了しています。
しかし、画像のグラフは両対数グラフです。
そのため、数値化し指数グラフにしたものを形状を変えないまま対数グラフに変換したいです。
方法などについて、アドバイスいただけると幸いです。
よろしくお願いいたします。
  1 Comment
Atsushi Ueno
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の形が変わらない

Sign in to comment.

Answers (1)

交感神経優位なあかべぇ
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

Categories

Find more on 2 次元および 3 次元プロット in Help Center and File Exchange

Tags

Products


Release

R2022a

Community Treasure Hunt

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

Start Hunting!