我有一些数据需要以对数刻度的等高线图形式展示(矩阵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);
以下是我的真实数据:
![true](https://istack.dev59.com/hcZNg.webp)
我可以设置任何等高线标签,但由于我的数据是指数级别的(另外,在这个图中可见的标签是真实的,在下一个图中想要得到的),它们不会显示出来。
现在,由于我的数据是指数级别的,我必须使用对数刻度来正确显示矩阵Z中的数据。以下是我如何做到的(也许还有其他更好的方法,但我不知道,我没有找到其他的):
[C, h1] = contourf(X, Y, log(Z));
clabel(C,h1);
这是我的图片展示:
![logdtata](https://istack.dev59.com/fKIJ3.webp)
现在它看起来很好 - 您可以看到我的数据变化。但是,标签是错误的。我现在可以将它们设置为您喜欢的任何向量:
- 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)。
clabel
绘制的那些吗? - BillBokeeylog(Z)
传递给外部函数,所以这些数字是没有基数的指数。我建议你不要改变任何东西,因为写10^-5
和-5
没有区别,但会占用更多的空间。在命令窗口中打印log(Z)
并查看。 - Yvonlog10
。 - Yvon