File Exchange

image thumbnail


version (8.38 KB) by Sebastian Hölz
Draw a colored line in 2D or 3D


Updated 16 Apr 2007

View License

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


Cite As

Sebastian Hölz (2020). cline (, MATLAB Central File Exchange. Retrieved .

Comments and Ratings (17)

Great function!


How I can change the range of colors. I use the following command but it does not effect
c = linspace(50, 100, size(data,1));


Great function.
Should there be a "||" between lines 64 and 65?
"Consider using newline, semicolon, or comma before this statement for readability."
"Terminate statement with semicolon to suppress output (in functions)."
I think MATLAB is interpreting line 65 as a statement of the IF function rather than as part of the conditional statement.

I am using MATLAB R2017a Windows.



Thank you for the great function! Is it also possible to animate this line?

@Dennis: Simple solution:

h = cline(...);



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.

Great function,

Is it possible to obtain dots instead of a line?

Regards, Dennis.


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



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')




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.


Great, works perfectly, thanks

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);

Sean Torrez

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

Xavi Alonso

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

Matt Bennett

MATLAB Release Compatibility
Created with R14SP2
Compatible with any release
Platform Compatibility
Windows macOS Linux

Inspired by: Linear 2D Plot with Rainbow Color

Inspired: Perceptually improved colormaps