File Exchange

image thumbnail

cline

version 1.0 (8.38 KB) by

Draw a colored line in 2D or 3D

4.85714
7 Ratings

35 Downloads

Updated

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.

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

INPUT
=====
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

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

Examples
========
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

Sebastian

Comments and Ratings (13)

SNyk

SNyk (view profile)

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

Sebastian Hölz

@Dennis: Simple solution:

h = cline(...);
set(h,'Marker','.','LineStyle','none')

Sebastian

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.
Thanks.
M

Great function,

Is it possible to obtain dots instead of a line?

Regards, Dennis.

William Silva

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];
        newcdata=reshape(cdata,size(cdata,1),1,size(cdata,2));
    end

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

Cheers,
Alessandro

Sebastian Hölz

@Jaap:

Use the following syntax:

fig = figure;
h = cline(...);
set(h,'linewidth',5)

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

Cheers

Sebastian

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.

Natasha

Great, works perfectly, thanks

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
( www.mathworks.com/matlabcentral/fileexchange/28790-colorspace-transformations ) 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
MATLAB 7.0.4 (R14SP2)

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

» Watch video