Вопрос по plot, mouse, matlab, datapoint – Получение значений X и Y из Matlab Plot

3

У меня есть график, и я хочу восстановить x и y, когда мы выбираем конкретную точку данных, используя мышь из графика.

Есть идеи?

Ваш Ответ

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) позициями, где вы щелкали по строкам. Вы можете обработать результат путем поиска ближайшей фактической точки и проверить, был ли клик в пределах разумного радиуса, чтобы принять его.

Очевидно, что гораздо проще просто использовать режим курсора данных, как отмечали другие ...

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

~ ~ @ Редактирова
Убедитесь, что функцияmyUpdateFcn вложен в основную функцию (обратите внимание на дваend внизу моего примера), чтобы убедиться, что myData известна внутри функции. Если вложение невозможно, вместо этого сделайте myData глобальной переменной.

@ H.Muster, Спасибо за ваш ответ, я попробовал это, и я получил ошибку на рисунке, которая говорит «ошибка в пользовательской функции строки подсказки данных». Можете ли вы помочь мне в этом. Satya Vamsi
Почему бы тебе не опубликовать это в своем вопросе? H.Muster
Пожалуйста, посмотрите мой обновленный ответ. H.Muster
Этот пример работает без проблем для меня, поэтому, я думаю, я не могу помочь, не увидев ваш реальный код. Может быть, вы можете добавить соответствующую часть кода к вашему вопросу? H.Muster
Я отправил свой код в качестве ответа, я попытался добавить код в комментарий, но у меня возникла проблема с количеством символов. Satya Vamsi
2

жмите на нее, а затем дважды щелкните на вашей фигуре, вы должны получить то, что вы хотите.

Мой сюжет в Uitab, и у меня не может быть кнопки данных. Я хочу получить значения x, y в переменную, а не видеть их на рисунк Satya Vamsi
1

Plotly MATLAB API чтобы получить текст при наведении курсора на веб-графики.

Данные отображаются при наведении курсора мыши на точку или при нажатии и перетаскивании для увеличения. Вот онлайн-версия графика ниже. Изображение ниже показывает наведенный текст; Вы также можете щелкнуть ссылку «данные и график», чтобы получить доступ к данным позади графика в сетке.

Примечание: я в команде 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

Похожие вопросы