Matlab 是否正确更改颜色栏的标签?

Matlab 是否正确更改颜色栏的标签?,matlab,colors,matlab-figure,Matlab,Colors,Matlab Figure,我有对数的数据。我是这样画的: contourf(x, y, log10(my_data));colorbar; 现在,图像看起来很好-颜色根据每个点的值进行缩放,因此我的图像是彩色的。但是,我的颜色栏旁边显示的值是错误的-它们缺少基本值(即我有3而不是10^3)。因此,我尝试按照建议使用caxis: 这有点帮助:颜色栏显示的值是正确的。然而: 我的图像现在是一种颜色,好像我打印了我的_数据而不是log10(我的_数据)。根据该报告,这是一种预期效果我如何摆脱它 颜色栏上的值显示为100200

我有对数的数据。我是这样画的:

contourf(x, y, log10(my_data));colorbar;
现在,图像看起来很好-颜色根据每个点的值进行缩放,因此我的图像是彩色的。但是,我的颜色栏旁边显示的值是错误的-它们缺少基本值(即我有3而不是10^3)。因此,我尝试按照建议使用caxis:

这有点帮助:颜色栏显示的值是正确的。然而:

  • 我的图像现在是一种颜色,好像我打印了我的_数据而不是log10(我的_数据)。根据该报告,这是一种预期效果我如何摆脱它
  • 颜色栏上的值显示为100200400,itd。H我怎样才能把它改成科学记数法?
  • 编辑:索弗的想法行之有效。然而,我最初的滴答声不仅仅是10的好幂。因此,新的记号如下:10^-1、10^-0.5、10^0、10^0.5、10^1等。但我不想要10^-0.5、10^0.5等记号。因此,我有一个新的(较短的)记号列表和我想要的标签:

    set(cbar, 'TickLabels', new_labels)
    
    现在我的标签是这样的:10^-1,10^-0,10^1,10^2,10^-1,10^-0,10^1,10^2,等等

    我应该如何处理这个问题?

    您想修改属性,为每个记号创建一个自定义标签。可以检索当前位置,然后为每个位置创建标签

    cbar = colorbar;
    
    % Get the current location of the tick marks
    ticks = get(cbar, 'ticks');
    
    % Now create a label for each tick mark (you can modify these however you want)
    labels = arrayfun(@(x)['10^', num2str(x)], ticks, 'uniformoutput', false);
    
    % Assign the labels to the colorbar
    set(cbar, 'TickLabels', labels)
    
    更新

    在运行上述代码之前,您还可以自己手动指定记号位置

    ticks = [0 10 100 1000];
    set(cbar, 'ticks');
    
    您希望修改该特性,以便为每个记号创建自定义标签。可以检索当前位置,然后为每个位置创建标签

    cbar = colorbar;
    
    % Get the current location of the tick marks
    ticks = get(cbar, 'ticks');
    
    % Now create a label for each tick mark (you can modify these however you want)
    labels = arrayfun(@(x)['10^', num2str(x)], ticks, 'uniformoutput', false);
    
    % Assign the labels to the colorbar
    set(cbar, 'TickLabels', labels)
    
    更新

    在运行上述代码之前,您还可以自己手动指定记号位置

    ticks = [0 10 100 1000];
    set(cbar, 'ticks');
    

    谢谢但是,当我想要比原始图中的滴答声少时,我该怎么办呢?我使用了你答案中的代码,得到了10^1.5这样的记号。这并不奇怪,因为我最初的滴答声并不是严格意义上的10的幂。我试着过滤掉我不想要的虱子。但是matlab试图为每个刻度指定一个标签。所以现在蜱虫重复它们自己。如何处理?可以通过
    set实现手动标签(cbar,'Ticks',yourticks,'ticklebels',yourtlabels
    yourticks
    必须是包含刻度的向量,而
    yourtlabels
    必须是包含相应字符串的单元格数组。此外,您可以查看感谢。但是,如果我希望刻度小于原始绘图中的刻度,我该怎么办?我使用了代码从你的答案中,我得到了10^1.5这样的刻度。这并不奇怪,因为我原来的刻度严格来说不是10的幂。我尝试过滤掉我不想要的刻度。但是matlab尝试为每个刻度指定一个标签。所以现在刻度会重复自身。我应该如何处理它?你可以通过
    设置来实现手动标签(cbar,'Ticks',yourticks,'ticklebels',yourtlabels
    yourticks
    必须是包含Ticks的向量,而
    yourtlabels
    必须是包含相应字符串的单元格数组。此外,您可以查看一下用法
    labels=arrayfun(@(x)['10^{',num2str x','}',Ticks',uniformoutput',false)
    注意添加的
    {…}
    注意添加的
    标签=arrayfun(@(x)['10^{',num2str(x),'}',勾选'uniformoutput',false);
    注意添加的
    {…}
    注意。。。