我使用Matlab创建极坐标并将其转换为笛卡尔坐标。
[th,r] = meshgrid((0:0.5:360)*pi/180,0:.02:1);
[X,Y] = pol2cart(th,r);
我获取此网格上的数据并在其上生成contourf
图。
我的问题是我在我的轮廓图中得到了一条中心线,我想删除它,有些人可以帮我这个
谢谢
答案 0 :(得分: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) ;
界面上的黑线是因为函数contourf
创建了patch
个对象,这些对象倾向于“关闭”它们(它们将在它们的配置文件中定义的第一个和最后一个点之间创建一条线)。
如果您未在360度范围内完成配置文件的定义,则更容易观察。右侧的图片显示了相同的示例,但网格仅来自0:350
,LineStyle
设置为:
。
如您所见,很难控制Matlab实际呈现此特定配置文件限制的方式。有一些方法可以控制patch
个对象的特定边缘,但在这种情况下,它将涉及检索每个补丁对象的句柄(在我的情况下为10但在更复杂的情况下还有更多),找到您想要控制的边缘和基本上重新定义补丁(每个补丁)。你自己最好从头开始绘制补丁。
幸运的是,有一个简单的方法:摆脱所有补丁边缘线......
但是你可能会想念你的isolines!没问题,只需将它们绘制在补丁之上! 你可以获得所有彩色补丁(没有边框)和一组( 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
,以防你想修改你的isolines属性(颜色,样式,粗细等......)。
另外,建议指定等值线水平。这样,您可以确保contour
和contourf
都使用同一组isovalues。没有这个可能会有效(因为底层数据集是相同的),但我个人总是喜欢明确而不依赖于背景计算。