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

26 次查看(过去 30 天)
TRyo
TRyo 2024-1-23
グラフ画像を読み込んで、グラフを数値化する処理を書いています。
グラフ画像から数値を読み込み、指数グラフにするところまま完了しています。
しかし、画像のグラフは両対数グラフです。
そのため、数値化し指数グラフにしたものを形状を変えないまま対数グラフに変換したいです。
方法などについて、アドバイスいただけると幸いです。
よろしくお願いいたします。
  1 个评论
Atsushi Ueno
Atsushi Ueno 2024-1-23
片対数でやってみましたが、こういう事でしょうか?
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の形が変わらない

请先登录,再进行评论。

回答(1 个)

交感神経優位なあかべぇ
指数グラフの形状を変えないまま、両対数グラフに変換する例を作りました。
指数グラフの各軸のデータを両対数グラフのデータに変換(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

类别

Help CenterFile Exchange 中查找有关 2 次元および 3 次元プロット 的更多信息

标签

产品


版本

R2022a

Community Treasure Hunt

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

Start Hunting!