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

7,447 views (last 30 days)
benjamin ma on 27 Feb 2014
Commented: Walter Roberson on 23 Aug 2022

Mischa Kim on 27 Feb 2014
Edited: MathWorks Support Team on 16 Mar 2021
hold on
plot(x_pos,y_pos,'r*')
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
plot(x,y)
hold on
plot(x(10),y(10),'r*') % marking the 10th data point of x and y
Alternatively, starting in R2016b, you can specify the MarkerIndices property to plot a line with markers at specific data points. For example, plot a line with a marker at the 10th data point.
x = 0:0.1:pi;
y = sin(x);
p = plot(x,y,'o-','MarkerIndices',10)
You can also specify marker properties, such as the face color and edge color.
p = plot(x,y,'o-','MarkerFaceColor','red','MarkerEdgeColor','red','MarkerIndices',10)
Walter Roberson on 23 Aug 2022
x = 0:0.1:pi;
y = sin(x);
p = plot(x,y,'o-','MarkerIndices', [10 20])

Greg on 6 Dec 2017
Edited: Greg on 6 Dec 2017
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:
plot(x,y);
hold on;
plot(x(10),y(10),'r*');
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);
MathWorks Support Team on 27 Nov 2018
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 on 9 Jan 2017
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,
Walter Roberson on 9 Jan 2017
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
end
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];
else
fprintf('skipping line #%d with unsorted x data\n', K);
end
end
if number_of_marks == 0
else
hold on
plot(where_to_mark(:,1), where_to_mark(:,2), 'r*');
end
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.

### Categories

Find more on Formatting and Annotation in Help Center and File Exchange

### Community Treasure Hunt

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

Start Hunting!