MATLAB Answers

how to set a marker at one specific point on a plot (look at the picture)?

6,154 ビュー (過去 30 日間)


Mischa Kim
Mischa Kim 2014 年 2 月 27 日
編集済み: MathWorks Support Team 2020 年 11 月 4 日
Benjamin, add
hold on
to your code. (x_pos,y_pos) is the data point that needs to be marked. So if you have
x = 0:0.1:pi;
y = sin(x);
you could use
hold on
plot(x(10),y(10),'r*') % marking the 10th data point of x and y
Starting in R2019a, you can pin multiple data tips. Data tips appear temporarily as you hover over the data points in a figure window. To display persistent(pinned) data tips, click one or more data points.
For more information on "Interactively explore Plotted Data", please refer to the following documentation:

  4 件のコメント

表示 1 件の古いコメント
Matt Kindig
Matt Kindig 2014 年 2 月 27 日
Sure. First you will need to define the plot object, however. Something like this should work:
h = plot(NaN, NaN, 'r*'); %define the graphics object, but don't render anything.
set(h,'Xdata', x(10), 'YData', y(10)); %mark 10th point
pause(5); %after a few seconds...
set(h, 'XData', x(20), 'YData', y(20)); %mark 20th point instead.
Vijay shankar Sridharan
Vijay shankar Sridharan 2021 年 1 月 4 日 8:58
Hi Mischa, I get error when I try to plot points with decimal points.
Walter Roberson
Walter Roberson 2021 年 1 月 4 日 20:39
Could you expand on what you mean about plotting points with decimal points? For example are you trying to do
set(h, 'XData', x(20.3), 'YData', y(20.3)); %mark 20.3th point instead.


その他の回答 (2 件)

Greg 2017 年 12 月 6 日
編集済み: Greg 2017 年 12 月 6 日
With 7k views in a month, I'm surprised this hasn't been updated.
Starting in R2016b, there is a MarkerIndices property. Instead of the other answer's suggested:
hold on;
Now simply use:
h = plot(x,y,'MarkerIndices',10);
Move the marker(s) around at any time if you've stored the handle h:
h.MarkerIndices = 5:5:length(x);

  1 件のコメント

MathWorks Support Team
MathWorks Support Team 2018 年 11 月 27 日
In addition, you can specify the ‘o-‘ line style, which creates a solid line and markers. You can also specify marker properties, such as the face color and edge color.
x = linspace(0,pi,30);
y = sin(x);
p = plot(x,y,'o-','MarkerFaceColor','red','MarkerEdgeColor','red','MarkerIndices',10)


navi g
navi g 2017 年 1 月 9 日
hello, is this marking in plot is possible without writing code, and putting mark in plot in figure editor,
and for sinosoidal curve i have only x data, i dont have y data, but i need to mark on curve, means that i will give x value, based on x value it should place on curve exactly on sinosoidal curve,

  1 件のコメント

Walter Roberson
Walter Roberson 2017 年 1 月 9 日
For R2014b or later (I would have to check about earlier; I see some references in 2012 time frame) you can use data brushing. Click on the paintbrush in the figure and then you can click on a point to mark it.
For marking a particular location given only the x, then
x_to_mark = SomeSpecificXValue;
all_lines = findobj(gca, 'type', 'line');
number_of_marks = 0;
where_to_mark = [];
for K = 1 : length(all_lines)
this_line = all_lines(K);
this_xdata = get(this_line, 'XData');
if x_to_mark < min(this_xdata) | x_to_mark > max(this_xdata)
continue; %the line does not span that x
x_diff = diff(this_xdata);
if isempty(x_diff)
fprintf('skipping line #%d that is single point\n', K);
elseif all(x_diff > 0) | all(x_diff < 0)
%it is monotonic, safe to do interpolation
this_ydata = get(this_line, 'YData');
y_to_mark = interp1(this_xdata, this_ydata, x_to_mark);
number_of_marks = number_of_marks + 1;
where_to_mark(number_of_marks,:) = [x_to_mark, y_to_mark];
fprintf('skipping line #%d with unsorted x data\n', K);
if number_of_marks == 0
fprintf('That x was not found on a line we could handle\n');
hold on
plot(where_to_mark(:,1), where_to_mark(:,2), 'r*');
This is probably a lot longer than you were expecting. You did not happen to provide information that we might potentially have used to make it shorter. For example if you know there is only exactly one line, and that the x were sorted when you plotted, and that the x value to mark is definitely in range, then the code could be made much shorter.


Community Treasure Hunt

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

Start Hunting!

Translated by