Plot Solid Positive-Valued/Dashed Negative-Valued Contour Plot
現在この質問をフォロー中です
- フォローしているコンテンツ フィードに更新が表示されます。
- コミュニケーション基本設定に応じて電子メールを受け取ることができます。
エラーが発生しました
ページに変更が加えられたため、アクションを完了できません。ページを再度読み込み、更新された状態を確認してください。
古いコメントを表示
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
2020 年 10 月 23 日
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).
8 件のコメント
Prince Alex
2020 年 10 月 23 日
編集済み: Prince Alex
2020 年 10 月 23 日
Offline for an hour because some idiot ISP technician disconnected the entire neighbourhood!
Try this:
xy = readmatrix('xy.txt');
Z = readmatrix('Z.txt');
[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
2020 年 10 月 23 日
Thats fantastic. Thanks a lottttt.
Star Strider
2020 年 10 月 23 日
As always, my pleasure!
And thanks for an interesting problem!
I know it's been quite a while since you posed this solution but it works perfectly until I try to set the contour levels manually.
For example if I change the cc.LevelList or cc.LevelStep, it does not show anything. Of course I can see everything with solid lines if I set the color to 'k', but how can I have dashed negatives while controlling the contour levels?
@doruk isik — I can’t determine what the problem is with your implementation.
Another approach could be —
[X,Y,Z] = peaks(50);
Zext = [min(Z(:)) max(Z(:))];
Zneg = linspace(Zext(1), -0.5, 7);
Zpos = linspace(0.5, Zext(2), 7);
lblfmt = '%.2f';
figure
contour(X, Y,Z, Zneg, '--', 'ShowText',1, 'LabelFormat',lblfmt, 'DisplayName','Negative Contours')
hold on
contour(X, Y, Z, Zpos, '-', 'ShowText',1, 'LabelFormat',lblfmt, 'DisplayName','Positive Contours')
contour(X, Y, Z, [0 0], ':k', 'ShowText',1, 'LabelFormat',lblfmt, 'DisplayName','Zero Contours')
hold off
colormap(turbo(14))
legend('Location','northoutside','Orientation','horiz')

It depends on what you want to do and how you want to do it.
.
I was just testing different stuff with the code you provided in 2020. If I use it as is, it gives me the following

If I modify the contour handle cc by manually defining the levels as such
[CM,cc] = contour(Xm,Ym,Zm,'ShowText','on');
cc.LineStyle = ':';
cc.Color = 'w';
cc.LevelList=-0.1:0.02:0.1; % this is my addition
Lvls = cc.LevelList;
it gives me the following

The contour function chooses the contour level values and number of levels itself if they aren’t specified. It likely specifies more contours than the colon operator chooses. To get more of them,, either use a smaller step size than 0.02 or use the linspace function. The colon operator fixes the step increment and lets the length (number of elements) vary. The linspace function fixes the number of elements and varies the step increment.
その他の回答 (0 件)
カテゴリ
ヘルプ センター および File Exchange で Contour Plots についてさらに検索
タグ
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)
