删除等高线图上的边线

Bow*_*Bow 3 matlab figure contourf

我使用Matlab创建极坐标并将其转换为笛卡尔坐标.

[th,r] = meshgrid((0:0.5:360)*pi/180,0:.02:1);
[X,Y] = pol2cart(th,r);
Run Code Online (Sandbox Code Playgroud)

我获得了这个网格上的数据并contourf在其上生成了一个图.

我的问题是我在我的contourf图中得到了一条中心线,我想删除它,有些人可以帮我解决这个问题

在此输入图像描述

谢谢

Hok*_*oki 5

如果我延伸一点你的例子来得到我可以绘制的东西,我确实重现了这个问题:

[th,r] = meshgrid((0:0.5:360)*pi/180,0:.02:1);
[X,Y] = pol2cart(th,r);
Z = sqrt( X.^2 + Y.^2 ) ;

isoLevel = 0:0.1:10 ;
[C ,hc] = contourf(X,Y,Z,isoLevel) ;
Run Code Online (Sandbox Code Playgroud)

界面上的黑线是因为函数contourf创建patch对象,这些对象倾向于"关闭"它们(它们将在它们的轮廓中定义的第一个和最后一个点之间创建一条线).

examplereproduced

如果您未在360度范围内完成配置文件的定义,则更容易观察.右边的图片显示了相同的示例,但只有来自0:350LineStyle设置为的网格:.

如您所见,很难控制Matlab实际呈现此特定配置文件限制的方式.有一些方法可以控制patch对象的特定边缘,但在这种情况下,它将涉及检索每个补丁对象的句柄(在我的情况下为10但在更复杂的情况下更多),找到您想要控制的边缘并基本上重新定义补丁(他们每个人).你最好自己从头开始绘制补丁.


幸运的是,有一个简单的方法:摆​​脱所有补丁边缘线......

但是你可能会想念你的isolines!没问题,只需将它们绘制在补丁之上!你可以获得所有彩色补丁(没有边框)和一组(iso)线,你可以完全控制它们.

两种简单的方法来获得没有线的补丁(i)设置阴影shading flat,或(ii)'EdgeColor','none'contourf函数的参数中指定.

要将您的isolines放在首位,请使用sister contour函数.

因此,使用相同的X,Y并且Z数据比以前:

isoLevel = 0:0.1:10 ;
[C ,hc] = contourf(X,Y,Z,isoLevel,'EdgeColor','none') ;  %// set of patches without border
% shading flat %// use that if you didn't specify ('EdgeColor','none') above
hold on
[C2 ,hc2] = contour(X,Y,Z,isoLevel,'LineColor','k') ;    %// now get your isolines
Run Code Online (Sandbox Code Playgroud)

将呈现:

patchlineOK

存储句柄是个好主意hc2,以防你想要修改你的isolines属性(颜色,样式,粗细等......).

此外,建议指定等值线级别.这种方式可以确保两个contourcontourf将使用同一套isovalues的.它可能没有这个(因为底层数据集是相同的),但我个人总是喜欢明确而不依赖于背景计算.