如何自定义轮廓线标签?

时间:2018-11-24 03:16:41

标签: label octave contour

我想使用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()"});

Two more or less identical plots produced by the code snippet above

哪个仅产生少量(如果有)不同的情节。标签在那里,但看起来一点也不好。我需要这个项目更好的质量。

我想做的是,按照优先顺序:

  1. 仅显示带有2-3个十进制数字的标签。
  2. 将标签背景更改为白色。
  3. 绘制与轮廓线一致的标签。

从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

我不确定如何确定一个值的重复次数。 非常感谢您提供帮助。

2 个答案:

答案 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)

好吧,我使用了您的建议,并对我的真实数据进行了一些修改,以获得以下图表:

enter image description here

除了情节左半部分的那个孤独的“ 0.09”外,这对我的需求有好处。那不应该在那里,但我不知道为什么会出现。

set(gca,'children',flip(get(gca,'children')))不起作用。