matlab 等值线间距问题
,Profile,'Color','k','LineWidth',1.2);
set(gca,'ShowText','on','TextStep',get(gca,'LevelStep')*0.02);
这里的LevelStep是怎么控制等值线间距的,为什么用0.5和0.02没有差别呢,想把等值线画的密一点怎么办
求高手解决 展开
1、首先提个建议,gca是一个比较常用的函数,用于获取当前坐标系句柄,最好不要用它当变量名来用。
2、LevelStep属性应当是一个标量,可用于控制等值线的间距(前提是LevelStepMode属性为auto)。但题主设置的属性是TextStep而非LevelStep。
TextStep属性同样应当为标量,其作用是决定在哪些等值线上显示数据标签。需要注意的是,在哪些线上显示数据标签,不仅取决于TextStep,同时还与LevelStep(或LevelList)有关,也就是说,只有由LevelStep(或LevelList)确定存在等值线的位置,才可能显示数据标签。
举例说,题主设置的TextStep是LevelStep的0.5或0.02倍,刚好能被1整除,所以结果是每条线上都会显示数据标签;如果把0.5该成0.4,题主再看看是什么情况?
要想【把等值线画的密一点】,很简单,应该修改LevelStep而非属性TextStep,例如:
[x y z]=peaks;
[c,h] = contour(x,y,z,'Color','k','LineWidth',1.2);
set(h,'ShowText','on','LevelStep',get(h,'LevelStep')*0.2);
3、顺便说一下刚注意到的兼容性问题。我在2008a上用上面的命令,发现不能修改等值线的颜色,但在2015a上没问题。下面是一点分析,仅作为个人的一点记录,没兴趣不必看。
分析了一下2008a中相关的代码,注意到其中有提到【Color is hidden because we want people to start using LineColor】,也就是,对于contour这种组合图形对象,Color属性是隐藏的,因开发者希望用户使用LineColor来代替它。至于2015a,该版本contour的实现手段完全不同,里面调用了contourHGUsingMATLABClasses函数,但这是一个p文件,无法进一步分析。至于是从哪个版本改的,限于时间精力,就不深究了。
clear
clc
close all
A=[0 0 0.35
0 30 0.36
0 60 0.4
0 90 0.4
0 120 0.45
0 135 0.47
0 150 0.48
0 165 0.51
0 180 0.53
0 210 0.57
0 240 0.6
0 255 0.63
0 270 0.69
0 285 0.76
0 300 0.82
4 0 0.41
4 30 0.43
4 60 0.44
4 90 0.52
4 120 0.53
4 135 0.59
4 150 0.61
4 165 0.65
4 180 0.75
4 210 0.88
4 240 0.92
4 255 0.96
4 270 1
4 285 1.1
4 300 1.2
8 0 0.5
8 30 0.51
8 60 0.53
8 90 0.67
8 120 0.64
8 135 0.68
8 150 0.85
8 165 1.02
8 180 1.13
8 210 1.23
8 240 1.25
8 255 1.29
8 270 1.3
8 285 1.35
8 300 1.5];
x=A(:,1);
y=A(:,2);
z=A(:,3);
xmin=min(x); xmax=max(x);
ymin=min(y); ymax=max(y);
[xx,yy]=meshgrid(linspace(xmin,xmax,30),linspace(ymin,ymax,30));
zz=griddata(x,y,z,xx,yy,'v4');
v=floor(min(zz)):0.05:ceil(max(zz)); % 坐标值标注范围及间距
[c,h]=contour(xx,yy,zz,v);
clabel(c,h,'LabelSpacing',500)
x=A(:,1);
y=A(:,2);
z=A(:,3);
xmin=min(x); xmax=max(x);
ymin=min(y); ymax=max(y);
[xx,yy]=meshgrid(linspace(xmin,xmax,20),linspace(ymin,ymax,20));
zz=griddata(x,y,z,xx,yy,'v4');
figure
v=floor(min(zz)):0.05:ceil(max(zz)); % 坐标值标注范围及间距
[c,h]=contour(xx,yy,zz,v);
clabel(c,h,'LabelSpacing',500)
colormap('gray')