Code covered by the BSD License  

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

» Watch video

Highlights from

4.9 | 7 ratings Rate this file 37 Downloads (last 30 days) File Size: 8.38 KB File ID: #14677 Version: 1.0
image thumbnail




16 Apr 2007 (Updated )

Draw a colored line in 2D or 3D

| Watch this File

File Information

There are several files on the FEX which deal with the plotting of colored lines, but they all have some drawbacks. I wrote a little file, which extends the scope of the submission by Kun Liu (s. below, hoping to deliver a general purpose file, which should work for most purposes.

h = cline(x, y [, z, cdata])

x: vector with x-values
y: vector with y-values
z (opt.): vector with z-values
cdata (opt.): vector with color-data

2 input arguments => cdata = y; z=0
3 input arguments => cdata = z
4 i.a. & z = [] => cdata = y; z=0

h: Handle to line (i.e. patch-object !!!)

t = 2*pi:.1:8*pi;

cline(sqrt(t).*sin(t), sqrt(t).*cos(t));
cline(sqrt(t).*sin(t), sqrt(t).*cos(t), t);
cline(sqrt(t).*sin(t), sqrt(t).*cos(t), t, rand(size(t))); view(3)
cline(sqrt(t).*sin(t), sqrt(t).*cos(t), [], rand(size(t))); view(3)

OK, hope you find this file useful



Linear 2 D Plot With Rainbow Color inspired this file.

This file inspired Perceptually Improved Colormaps.

MATLAB release MATLAB 7.0.4 (R14SP2)
Other requirements none
Tags for This File   Please login to tag files.
Please login to add a comment or rating.
Comments and Ratings (12)
01 Apr 2016 Sebastian Hölz

@Dennis: Simple solution:

h = cline(...);


Comment only
13 Jan 2016 Mohammad

Hi Dennis,
If we replace line 82 with
set(p,'cdata', cdata, 'marker', 's', 'edgecolor','interp')
, it will also plot the points.
However, I do not know how to only plot the points and not the line. Maybe Sebastian can comment on his great function.

Comment only
12 Aug 2015 Dennis Honkanen

Great function,

Is it possible to obtain dots instead of a line?

Regards, Dennis.

01 Feb 2015 William Silva  
14 Jan 2014 alessandro

Nice function.
Answering to Xavi Alonso (even if comment is quite old), you could insert a matrix mx3 just be reshaping cdata in a way you have mx1x3.
Indeed I have modified cline function replacing rows 76-81 with:

elseif nargin == 4
if isempty(z); z = zeros(size(x)); end
p = patch([x(:); nan], [y(:); nan], [z(:); nan], 0);
cdata = [cdata;nan nan nan];

it is not optimized maybe but however it worked for me.
Hope this help


12 May 2011 Sebastian Hölz


Use the following syntax:

fig = figure;
h = cline(...);

The increased line-width will not be displayed, if you use "painters" as renderer for your figure. Therefore, you will have to change it:

set(fig, 'renderer', 'zbuffer')

- or -

set(fig, 'renderer', 'opengl')



Comment only
06 May 2011 Jaap

Jaap (view profile)

Thanks for the post, I find it very useful. Do you perhaps know a way to increase the thickness of the line? Adding filled circular patch markers does do something, but the markersize makes a very sharp transition at 4.8-4.9.

Comment only
05 May 2011 Natasha

Great, works perfectly, thanks

15 Oct 2010 Matteo Niccoli

This is really a great submission. I can think of vaery many ways of using it.

For starters, in conjunction with Colorspace transforamtions
( ) I used it for an example in my Perceptually improved colormaps submission. I used cline this way:

% J=jet(256);
% LJ=colorspace('RGB->Lab',J);
% figure; cline([1:1:256],LJ(:,1),LJ(:,1),[1:1:256],J);
% title ('L* plot for jet colormap','Color','k','FontSize',12);

Also, as I was reading Steve's post on Lab based colormaps (thank you Steve!), I used cline this way to help me visualize things (notice again I used colorspace):

% radius = 50;
% theta = linspace(0, pi/2, 256).';
% a = radius * cos(theta);
% b = radius * sin(theta);
% L = linspace(0, 100, 256).';
% Lab = [L, a, b];
% RGBhlx=colorspace('RGB<-Lab',(Lab));
% figure; cline(a, b, L, L,RGBhlx); view(3);
% VIEW(-165,-15);

12 Oct 2010 Sean Torrez

Beautiful file, thanks a bunch. Quite simple, works well.

19 Feb 2010 Xavi Alonso

it doesn't work for me when cdata is a matrix

Comment only
26 Jun 2007 Matt Bennett  

Contact us