删除等高线图上的边缘线

Removing the edge line on a contour plot

我用Matlab创建了一个极坐标并将其转换为笛卡尔坐标。

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

我在这个网格上获取数据并在其上生成 contourf 绘图。

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

谢谢

如果我稍微扩展你的例子以获得我可以绘制的东西,我会重现问题:

[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) ;

界面处的黑线是因为函数 contourf 创建了 patch 个对象,而这些对象倾向于 "close" 自身(它们将在第一个点和最后一个点之间创建一条线在他们的个人资料中定义)。

如果您没有完成超过 360 度的配置文件定义,这将更容易观察到。右边的图片显示了相同的示例,但网格仅来自 0:350,并且 LineStyle 设置为 :

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


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

但是你可能会错过你的等值线!没问题,只需将它们绘制在补丁之上即可! 您将获得所有彩色补丁(无边框)和一组您可以完全控制的 (iso) 线。

两个简单的方法让你在没有线条的情况下打补丁 (i) 将阴影设置为 shading flat,或 (ii) 在 contourf 函数的参数中指定 'EdgeColor','none'

要让等值线位于顶部,请使用姊妹 contour 函数。

所以使用与以前相同的 XYZ 数据:

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

将呈现:

如果您想修改等值线属性(颜色、样式、厚度等...),最好存储句柄 hc2

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