我使用Matlab创建了一个极坐标并将其转换为笛卡尔坐标。
[th,r] = meshgrid((0:0.5:360)*pi/180,0:.02:1);
[X,Y] = pol2cart(th,r);
我在这个网格上获取数据并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
对象,而这些对象往往会“关闭”自己(它们将在其配置文件中定义的第一个点和最后一个点之间创建一条线)。
如果您没有完成 360 度以上的轮廓定义,这更容易观察到。右侧的图片显示了相同的示例,但网格仅从0:350
和LineStyle
设置为:
。
如您所见,很难控制 Matlab 将如何实际呈现这个特定的配置文件限制。有一些方法可以控制patch
对象的特定边缘,但在这种情况下,它将涉及检索每个补丁对象的句柄(在我的情况下为 10 个,但在更复杂的情况下更多),定位您想要控制的边缘并基本上重新定义补丁(他们每个人)。你最好自己从头开始绘制补丁。
幸运的是,有一个简单的方法:去掉所有的补丁边缘线......
但是你可能会错过你的等值线!没问题,只需将它们绘制在补丁之上!你得到所有的彩色补丁(没有边框)和一组你可以完全控制的 ( iso ) 线。
有两种简单的方法可以让您不使用线条进行修补 (i) 将阴影设置为shading flat
,或 (ii)'EdgeColor','none'
在函数的参数中指定contourf
。
要让您的等值线位于顶部,请使用姐妹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
将呈现:
hc2
如果您想修改等值线属性(颜色、样式、厚度等),最好存储句柄。
此外,建议指定等值线水平。这样,您可以确保两者contour
都contourf
使用相同的等值集。没有这个它可能会工作(因为底层数据集是相同的),但我个人总是更喜欢明确而不依赖背景计算。