# Apply colormap coloring to a particular contour to indicate imaginary component

4 views (last 30 days)

Show older comments

##### 2 Comments

Walter Roberson
on 28 Feb 2024

### Accepted Answer

DGM
on 28 Feb 2024

Edited: DGM
on 28 Feb 2024

It can be done, but not with contour() or plot().

% some fake data

x = linspace(-1,1,100);

y = x.';

z = x.*y + sqrt(x) - sqrt(y);

% get the level curves of real(z)

[cc,hh] = contour(x,y,real(z),20);

[~,allcontours] = getContourLineCoordinates(cc);

% redraw everything again

figure

hold on;

zrange = [0 0];

for k = 1:numel(allcontours)

% interpolate to find imag(z) along this level curve

thisx = allcontours{k}(:,1);

thisy = allcontours{k}(:,2);

thisz = interp2(x,y,imag(z),thisx,thisy);

% accumulate colorscale limits

zrange(1) = min(zrange(1),min(imag(z(:))));

zrange(2) = max(zrange(2),max(imag(z(:))));

% draw the line using patch(), since line() can't do variable color

patch([thisx;NaN],[thisy;NaN],[thisz;NaN],'EdgeColor','interp','LineWidth',1);

end

clim(zrange)

The rest will be setting up your preferred colormap and such.

This example uses Adam's contour extraction tool from the FEX (attached):

##### 2 Comments

### More Answers (0)

### See Also

### Categories

### Community Treasure Hunt

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

Start Hunting!