プロット図があり、プロット図からマウスを使用して特定のデータポイントを選択するときに、x座標とy座標を取得したいと思います。
何か案は?
別のオプションは、ボタンダウン機能を使用することです。
function mouseExample()
h = plot(rand(10,1), 'o-');
set(h, 'ButtonDownFcn',@buttonDownCallback)
function buttonDownCallback(o,e)
p = get(gca,'CurrentPoint');
p = p(1,1:2);
title( sprintf('(%g,%g)',p) )
end
end
これは「データポイント」だけでなく、線をクリックした場所の補間された(x、y)位置でも機能することに注意してください。最も近い実際のポイントを検索して結果を処理し、クリックがそれを受け入れるのに適切な半径内にあるかどうかをテストできます。
明らかに、他の人が指摘しているように、データカーソルモードを使用する方がはるかに簡単です...
データボタンがない場合でも、コマンドを使用してデータカーソルモードをアクティブにすることができますdatacursormode
。データポイントを表示するのではなく保存する場合は、変更された更新関数を使用できます(matlabのドキュメントに記載されている例に基づいています)。
function getDataFromFigure()
% Plots graph and sets up a custom data tip update function
fig = figure;
a = -16; t = 0:60;
plot(t,sin(a*t))
% variable to store data points
myData = [];
% enable data cursor mode
dcm_obj = datacursormode(fig);
set(dcm_obj,'UpdateFcn',@myUpdateFcn)
set(dcm_obj, 'enable', 'on')
% do disable data cursor mode use
% set(dcm_obj, 'enable', 'off')
function txt = myUpdateFcn(dummy, event_obj)
% Customizes text of data tips
% read out data point
pos = get(event_obj,'Position');
% store data point
myData(end+1,:) = pos;
% no data shown on figure
txt = {''};
% or
% data also shown on figure:
% txt = {['Time: ',num2str(pos(1))],...
% ['Amplitude: ',num2str(pos(2))]};
end
end
〜edit〜関数がメイン関数内にネストされて
いることを確認し(私の例の下部にある2つに注意してください)、myDataが関数内で認識されていることを確認します。ネストが不可能な場合は、代わりにmyDataをグローバル変数にします。myUpdateFcn
end
図の上部にデータカーソルと呼ばれる小さなボタンがあります。それをクリックし、次にあなたの図をダブルクリックすると、あなたはあなたが望むものを手に入れるはずです。
Plotly MATLAB APIを使用して、Webベースのグラフのホバー上のテキストを取得できます。
マウスをポイント上に移動するか、クリックしてドラッグしてズームすると、データが表示されます。以下のグラフのオンラインバージョンは次のとおりです。下の画像はホバーテキストを示しています。[データとグラフ]リンクをクリックして、グリッド内のグラフの背後にあるデータにアクセスすることもできます。
注:私はPlotlyチームに所属しています。
api_path = '/path/to/plotly';
addpath(api_path);
api_key = 'key';
username = 'username';
signin(username, api_key);
x=ones(3000,1); x(1:1000) = 1; x(1001:2000) = 2; x(2001:3000) = 3;
y=ones(3000,1); y(1:1000) = lognrnd(0,1,1000,1); y(1001:2000) = lognrnd(0,2,1000,1); y(2001:3000) = lognrnd(0,3,1000,1);
s=struct('type','box','jitter',0.5);
layout = struct('title', 'Fun with the Lognormal distribution','yaxis',struct('type','log'));
plotly(x,y, struct('style', s));
response = plotlylayout(layout);
url = response.url
filename = response.filename