3

我有一个绘图图,当我们使用鼠标从绘图图中选择特定数据点时,我想检索 x 和 y 坐标。

有任何想法吗?

4

4 回答 4

7

另一种选择是使用按钮向下功能:

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) 位置。您可以通过搜索最近的实际点来处理结果,并测试点击是否在合理的半径内以接受它。

显然,正如其他人所指出的那样,仅使用数据游标模式要容易得多......

截屏

于 2012-06-29T14:32:48.887 回答
5

即使您没有数据按钮,您也可以通过命令激活数据光标模式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 设为全局变量。

于 2012-06-28T10:18:58.873 回答
2

您的图形顶部有一个名为数据光标的小按钮。点击它,然后双击你的图,你应该得到你想要的。

于 2012-06-27T19:03:37.223 回答
1

您可以使用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

MATLAB 悬停

于 2014-01-24T00:13:25.483 回答