如果我稍微扩展一下你的例子来得到一些我可以绘制的东西,我确实会重现这个问题:
[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
create patch
对象,并且这些对象倾向于“闭合”自身(它们将在其配置文件中定义的第一个点和最后一个点之间创建一条线)。
如果您没有完成超过 360 度的轮廓定义,则更容易观察到这一点。右图显示了相同的示例,但网格仅来自0:350
并与LineStyle
set to :
.
正如您所看到的,很难控制 Matlab 如何实际渲染这个特定的配置文件限制。有一些方法可以控制特定的边缘patch
对象,但在这种情况下,它将涉及检索每个补丁对象的句柄(在我的例子中为 10 个,但在更复杂的情况下更多),找到要控制的边缘并基本上重新定义补丁(每个补丁)。您最好自己从头开始绘制补丁。
幸运的是,有一个简单的方法可以解决这个问题:去掉所有的补丁边缘线......
但这样你可能会错过你的等值线!没问题,只需将它们绘制在补丁之上即可!
您将获得所有彩色补丁(无边框)和一组(iso)您可以完全控制的线路。
两种简单的方法让您无需线条即可进行修补(i)将阴影设置为shading flat
,或 (ii) 指定'EdgeColor','none'
在参数中contourf
功能。
为了让等值线位于顶部,请使用姐妹contour
功能。
所以使用相同的X
,Y
and 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
将呈现:
存放手柄是个好主意hc2
如果您想修改等值线属性(颜色、样式、厚度等...)。
此外,建议指定等值线水平。这样您就可以确保两者contour
and contourf
将使用同一组等值。如果没有这个,它可能也可以工作(因为底层数据集是相同的),但就我个人而言,我总是更喜欢明确的而不依赖于后台计算。