View License

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video

Highlights from
line_fewer_markers

Join the 15-year community celebration.

Play games and win prizes!

» Learn more

4.58824
4.6 | 18 ratings Rate this file 79 Downloads (last 30 days) File Size: 30.2 KB File ID: #42560 Version: 1.5
image thumbnail

line_fewer_markers

by

Massimo Ciacci (view profile)

 

10 Jul 2013 (Updated )

An alias of the LINE command, with additional control for markers, in number and location.

Editor's Notes:

This file was selected as MATLAB Central Pick of the Week

| Watch this File

File Information
Description

Allows control of nr of markers, and positioning uniformly along x or along the curve, and with the option to lock on a local max.
Accept same inputs as the LINE command, with the additional parameter NUM_MARKERS, specifying how many markers to be plot.
Inspired by the first answer given by Ioannis Filippidis on
http://www.mathworks.com/matlabcentral/answers/2165-too-many-markers

Required Products MATLAB
MATLAB release MATLAB 7.12 (R2011a)
MATLAB Search Path
/
/line_fewer_markers_v4
Tags for This File   Please login to tag files.
Please login to add a comment or rating.
Comments and Ratings (30)
15 Jun 2016 Mohsen Mohammadi

This is great and I am so appreciated. I have one question; In curves I plot the end of curves should be clear but the marker on it will make them inaccurate. How I can remove the last marker on the curve. Thanks a lot.

14 Apr 2016 Giacomo Verona

Great code! So useful!

Comment only
29 Feb 2016 Ivar Eskerud Smith

Great function! However, I discovered one problem: If I plot x vs y and y is only zeros, the interp1 function encounters a problem. Replacing line 94 with the following solved the problem for me (The result becomes nan and not inf, since one divides 0 by 0):

(sum(isinf(yNrm) | isnan(yNrm))>0) || sum(isinf(x) | isnan(x))>0

26 Jan 2016 Ioannis Filippidis

Thanks for the attribution. For posterity, the function that I mentioned in that thread is here: https://github.com/johnyf/plot_utils/blob/bd304279ee0e000f72fc936e0ef9f3a690d4e654/plot_subsample/plot_fewer_markers.m

Comment only
03 Dec 2015 Ha Nguyen

It got this error when I run:
Error using interp1 (line 257)
The values of X should be distinct.

Error in line_fewer_markers (line 101)
ti = round(interp1(s,t,si)); %find x index of markers

Comment only
03 Dec 2015 XUE BAI

Really a man of genius!!! Thank you! It takes me a long time to find a solution to plot the curves in this way.

03 Dec 2015 Jane

Jane (view profile)

It seems the property+value pair for 'spacing', 'curve' is not working for straight lines but only for curves. But the spacing is actually the same when plotting straight lines anyway. Right?

Comment only
18 Nov 2015 Thomas

Thomas (view profile)

Great tool!
I have a feature suggestion: if there are multiple lines to be plotted, distribute the markers such that they do not overlap.

04 Sep 2015 SandStone

Very nice man! Thank you!!

@Jeril K: put the function in the same folder as the script you want to run it in. When that is done, see: http://blogs.mathworks.com/pick/2013/08/16/line-plots-with-fewer-markers/

Comment only
04 Sep 2015 SandStone

Very nice man! Thank you!!

25 Aug 2015 Glo

Glo (view profile)

To apply marker on the minimum value replace Line 108:
[Mv,idx] = max(y); to
[Mv,idx] = min(y);

Useful in case it is important to show minimum value, e.g. S-parameter graph.

01 Apr 2015 Jeril K

I am very new to MATLAB, could anyone please tell me how to use 'line_fewer_markers' function. While I am trying to create a chart, it says undefined function 'line_fewer_markers'.
Thanks

Comment only
21 Nov 2014 Yonatan Afework

Great work!

Comment only
21 Nov 2014 Yonatan Afework  
14 Nov 2014 Julio

Julio (view profile)

works very fine. Thank you so much.

21 Oct 2014 Jérémy

Great !
This makes perfectly what I needed.
Thank you for your answer so fast!

( N.B: For Matlab R2009B, the function iscolumn(x) isn't supported, so I simply replaced it with (size(x,2)==1) )

17 Oct 2014 Massimo Ciacci

Massimo Ciacci (view profile)

@Jeremy

Yes, there is a workaround to use it in plotyy, that does not require changing line_fewer_markers, just function pointers, as follows:

figure(10); hold on; set(gca,'FontSize',16); set(gca,'FontName','Times'); set(gcf,'Color',[1,1,1]);
x=(1:10);
y1=x.^2;y2=x.^3;

f1 = @(x,y)line_fewer_markers(x,y,5,'ro','LegendLine','off');
f2 = @(x,y)line_fewer_markers(x,y,8,'bs','Spacing','curve','markerfacecolor','b');
[u,lh1,lh2] = plotyy(x,y1,x,y2,f1,f2)

legend('curve 1','curve 2')

Comment only
16 Oct 2014 Jérémy

Hello !
Thank you for this usefull function !

Is there a way to use it on a two Y-axis plot, with plotyy ?

25 Sep 2014 Marie

Marie (view profile)

Nice function! I was desperate with my two lines and non-corresponding legends... Great job !

Is that possible to get a 3D version, like plot3 ?

Comment only
25 Sep 2014 Marie

Marie (view profile)

 
21 Feb 2014 Maria Pershina

Just awesome!!!

Comment only
13 Feb 2014 David Lindell

Nice one!

21 Dec 2013 Xiaoxia Ye

If the function is able to handle nan data as "plot" does, it will be even more awesome.

13 Sep 2013 Pasumarthi Viswanath  
28 Aug 2013 Pablo

Pablo (view profile)

a great function!

19 Aug 2013 Joe

Joe (view profile)

 
07 Aug 2013 Emerson

Thanks for the update. Love the results!

07 Aug 2013 Jan Simon

Jan Simon (view profile)

Without doubt the results are a strong optical improvement compared to adding a marker at each point.

06 Aug 2013 Massimo Ciacci

Massimo Ciacci (view profile)

I just added an option to disable line showing up in the legend (so that only the marker will show up). This option is:'LegendLine','off'

Comment only
05 Aug 2013 Emerson

I am new to Matlab so I don't feel I'm qualified to give a rating or strong comments yet, but this has been very useful to me in achieving an important plot that seems to be almost inexplicably unnatural to achieve with Matlab.

Massimo, could you tell me whether or not it is possible to show only the markers in the legend rather than the markers in addition to the line style? I ask because my plot is only black and white with the same lines style for every curve, and I imagine this isn't uncommon for publications. The preferred legend for this style shows only the markers.

Comment only
Updates
11 Jul 2013 1.1

- better formatted text indentation
- fixed few typos in comments
- added abbreviations for marker specs (mk,mks,mfc)

06 Aug 2013 1.2

Added option
'LegendLine','off'
to inhibit linestyle to show in legend.

20 Aug 2013 1.3

- added compatibility for column vector input

17 Oct 2014 1.4

- Added support for logarithmic X spacing of markers
- Added example on how to use it with plotyy

17 Oct 2014 1.5

same as 2 minutes ago

Contact us