我有一个绘图图,当我们使用鼠标从绘图图中选择特定数据点时,我想检索 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~
确保函数myUpdateFcn
嵌套在主函数中(注意end
我示例底部的两个),以确保 myData 在函数中是已知的。如果无法嵌套,请将 myData 设为全局变量。
您的图形顶部有一个名为数据光标的小按钮。点击它,然后双击你的图,你应该得到你想要的。
您可以使用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