# Plot Solid Positive-Valued/Dashed Negative-Valued Contour Plot

12 views (last 30 days)
Prince Alex on 23 Oct 2020
Commented: Star Strider on 23 Oct 2020
How is it possible to plot a contour plot with solid lines for positive values (above zero) and dashed lines for negative values. An example plot is attached.

Star Strider on 23 Oct 2020
The contour function itself cannot do that, however it is srtaightforward to adapt it:
[X,Y,Z] = peaks;
figure
hold on
[CM,cc] = contour(X,Y,Z,'ShowText','on');
cc.LineStyle = ':';
cc.Color = 'w';
Lvls = cc.LevelList;
PosIdx = find(ismember(CM(1,:),Lvls(Lvls>=0)));
PosLen = CM(2,PosIdx);
NegIdx = find(ismember(CM(1,:),Lvls(Lvls<0)));
NegLen = CM(2,NegIdx);
for k = 1:numel(PosIdx)
IdxRng = PosIdx(k)+1:PosIdx(k)+PosLen(k);
plot(CM(1,IdxRng), CM(2,IdxRng), '-k')
end
for k = 1:numel(NegIdx)
IdxRng = NegIdx(k)+1:NegIdx(k)+NegLen(k);
plot(CM(1,IdxRng), CM(2,IdxRng), '--k')
end
hold off
axis('equal')
producing:
This overplots the original contours so that any text values remain visible (ini case you want them shown).

Show 1 older comment
Star Strider on 23 Oct 2020
Offline for an hour because some idiot ISP technician disconnected the entire neighbourhood!
Try this:
[xl,xh] = bounds(xy(:,1));
[yl,yh] = bounds(xy(:,2));
[zl,zh] = bounds(Z);
xv = linspace(xl, xh, 150);
yv = linspace(yl, yh, 150);
[Xm,Ym] = ndgrid(xv, yv);
Zm = griddata(xy(:,1),xy(:,2),Z, Xm, Ym, 'natural');
figure
hold on
[CM,cc] = contour(Xm,Ym,Zm,'ShowText','on');
cc.LineStyle = ':';
cc.Color = 'w';
Lvls = cc.LevelList;
PosIdx = find(ismember(CM(1,:),Lvls(Lvls>=0)));
PosLen = CM(2,PosIdx);
NegIdx = find(ismember(CM(1,:),Lvls(Lvls<0)));
NegLen = CM(2,NegIdx);
for k = 1:numel(PosIdx)
IdxRng = PosIdx(k)+1:PosIdx(k)+PosLen(k);
plot(CM(1,IdxRng), CM(2,IdxRng), '-k')
end
for k = 1:numel(NegIdx)
IdxRng = NegIdx(k)+1:NegIdx(k)+NegLen(k);
plot(CM(1,IdxRng), CM(2,IdxRng), '--k')
end
hold off
grid
axis('equal')
producing:
.
Prince Alex on 23 Oct 2020
Thats fantastic. Thanks a lottttt.
Star Strider on 23 Oct 2020
As always, my pleasure!
And thanks for an interesting problem!