我有一些数据要显示为等值线图,其中包含值的对数刻度(矩阵Z)和标记的计数。我就是这样做的:
[C, h1] = contourf(X, Y, log(Z));
clabel(C,h1);
这是我的结果:
我的问题是:如何在轮廓上获得正确的标签?我不想要这里描述的彩条。
编辑:这是我的例子:
X = 1:1:20;
Y = X;
Z = zeros(size(Y));
for i = 1:size(Y,2);
Z(i, :) = 10^i;
end
[C, h1] = contourf(X, Y, Z);
clabel(C,h1);
我可以设置我想要的任何计数线标签,但它们不会可见,因为我的数据是指数型的(顺便说一下,在这个图中可见的标签是真实的,我想在下一个情节)。
现在,由于我的数据是指数的,我必须在显示的值(矩阵 Z)上使用对数刻度来正确显示数据。这是我的做法(也许还有另一种更好的方法,我不知道,我还没有找到其他方法):
[C, h1] = contourf(X, Y, log(Z));
clabel(C,h1);
现在看起来不错——你可以看到我的数据是如何变化的。但是,标签是错误的。我现在可以将它们设置为您喜欢的任何向量:
- 0:5:45 - 我会得到我现在所拥有的。
- 10^[0:5:45](我想要这些标签)。但是现在我绘制的数据范围是(0, 45)(因为我计算了它的对数)。因此,大多数标签都不会显示(它们超出了数据范围),并且会放错位置的标签。
理想情况下,我希望能够做到这样的事情:
[C, h1] = contourf(X, Y, Z, 'ZScale', 'Log');
clabel(C,h1);
并在底部获取带有标签 10、10^5、10^10 等的图片。
总而言之,我需要执行以下操作之一:
找到一种以编程方式设置对数刻度的方法,让 matlab 担心等值线。
能够手动更改等值线上的标签而不移动它们(new_label = 10^old_label)。