我想使用Octave在等高线图中可视化两个变量的功能,并在其上放置自定义的线标签。
我在Octave文档的基础上写道:
clf;
colormap ("default");
[x, y, z] = peaks ();
subplot(2,1,1);
contour (x, y, z,'showtext', 'on');
title ({"contour() plot, showtext on"; "Z = peaks()"});
subplot(2,1,2);
[ctr, h] = contour (x, y, z);
cll = clabel(ctr, h, 'backgroundcolor',[1 1 1]);
title ({"contour() plot, using clabel()"; "Z = peaks()"});
哪个仅产生少量(如果有)不同的情节。标签在那里,但看起来一点也不好。我需要这个项目更好的质量。
我想做的是,按照优先顺序:
从Octave文档看来,标签值存储在"userdata"
中,但是并没有太大帮助,因为:
>> get(cll, "userdata")
ans =
{
[1,1] = 6.7459
[2,1] = 5.4167
[3,1] = 5.4167
[4,1] = 4.0874
[5,1] = 4.0874
[6,1] = 2.7581
[7,1] = 2.7581
[8,1] = 2.7581
[9,1] = 2.7581
[10,1] = 1.4289
[11,1] = 1.4289
[12,1] = 1.4289
[13,1] = 1.4289
[14,1] = 0.099636
[15,1] = 0.099636
[16,1] = 0.099636
[17,1] = 0.099636
[18,1] = 0.099636
[19,1] = 0.099636
[20,1] = -1.2296
[21,1] = -1.2296
[22,1] = -1.2296
[23,1] = -1.2296
[24,1] = -2.5589
[25,1] = -2.5589
[26,1] = -2.5589
[27,1] = -3.8881
[28,1] = -5.2174
我不确定如何确定一个值的重复次数。 非常感谢您提供帮助。
答案 0 :(得分:1)
要显示更少的标签,最好的方法是手动指定绘制轮廓线的z值(请参见contourc
的文档说明):
colormap('default');
[x, y, z] = peaks();
vn = ceil(min(z(:))):floor(max(z(:))); % list of all integer values within range of data
contour(x, y, z, vn, 'showtext', 'on');
title({"contour() plot, showtext on"; "Z = peaks()"});
您还可以指定要在其上贴标签的轮廓线:
colormap('default');
[x, y, z] = peaks();
vn = ceil(min(z(:))):floor(max(z(:)));
[ctr, h] = contour(x, y, z, vn);
clabel(ctr, h, vn(1:2:end), 'backgroundcolor',[1 1 1]);
title({"contour() plot, showtext on"; "Z = peaks()"});
我这里没有Octave,但是'background color'
自变量应该起作用。可能会在文本上绘制线条,而不是在文本上绘制线条。 MATLAB有一个命令uistack
来强制绘制顺序,但是在Octave中似乎不存在。在那里,one possibility可能会更改轴对象的子代的顺序:
set(gca,'children',flip(get(gca,'children')))
(注意:MATLAB的contour
在选择良好的轮廓线水平方面做得更好,并且默认情况下,它还会中断标签所在的行,因此行和文本不会相交。)
答案 1 :(得分:0)