再理解公用colorbar参数

本文详细探讨了在Matlab中如何设置和调整colorbar,包括colormap、colorbar的分段、caxis参数以及刻度和标签的对齐。重点讲解了公用colorbar的关键在于确定caxis的范围,并通过实例展示了如何实现不同子图间colorbar的统一。同时,介绍了colorbar的各种属性,如Limits、Ticks、TickLabels等,以及它们在控制颜色条显示中的作用。
摘要由CSDN通过智能技术生成

关于共用colorbar的设置

  • 纠正

之前写过一篇关于公用colorbar的博文,虽说当时已经觉得没问题,但后再次遇见同样的问题,深入思考之后,发现确实有误,希望不要误导他人才好。
【原文地址】 https://blog.csdn.net/jerry003/article/details/107969336

对于坐标轴设置的新认识,以前有些浅尝辄止,学习和理解确需一个过程;

colorbar 参数

  1. colormap 与 colorbar

(1)colormap用于控制colorbar的输出色阶范围,如:

colormap(jet); % jet, summer, spring, rainbow等,当然默认是较密,看似连续的色阶;
colorbar; % colorbar(‘horiz’) 或者 colorbar(‘verti’)

在这里插入图片描述
(2)如需对其进行分段,则需提前对colormap进行分段

colormap(jet(10)) % 分10段
colorbar

在这里插入图片描述

  • 从分段结果可知,默认情况下,colorbar的上下限范围为[0, 1]; 这里是由于没有根据数据画图。
  • 当以数据画图时,默认情况下,colorbar会根据待画数据的最大值和最小值之间进行线性映射

data = 8 * rand(10);
pcolor(data)
colormap(jet(10))
colorbar

在这里插入图片描述

  • 不对齐的原因:默认的色条分段,是以数据的最大和最小为上下边界,分10段。本例中,最大值必然是小于等于8的,最小值大于等于0,所以色阶的划分刻度间隔其实是0.8左右;而刻度在默认情况下是以1为单位进行标注,因此产生了不对齐!
  • 如果修改以下刻度标注,可以实现对齐

data = 8 * rand(10);
pcolor(data)
colormap(jet(10))
h = colorbar
set(h, ‘Ticks’, linspace(min(data( : )), max(data( : )), 11))

在这里插入图片描述

注意:色阶分段和刻度(Tick)是相互独立的,只有两者范围一致是,刻度和色阶才匹配对齐。由于默认时,Tick间隔是[整数,如1,2等],所以需要caxis[max(data) - min(data)]/N 是整数才能保证对齐,其中N是colormap(jet(N))中要把色阶划分的个数。否则就只能通过修改Tick步长来和色阶匹配。

【刻度和色阶对齐的条件】: caxis 中的 (max - min) / (色阶划分的个数) = 整数

caxis,Limits, Ticks, TickLabels 参数

  • caxis[min, max]
    这个参数是公用colorbar的关键,它用于将所有子图的colorbar范围限定在[min, max]之间,然后通过 colormap(jet(10)) 划分色阶,从而确定所有子图的colorbar的范围和色阶。使用时许通过调节刻度和色阶进行匹配对齐。

如不设置,默认情况下, colorbar执行时会自动根据各个子图的数据大小范围进行划分 “色阶”,不同子图数据范围通常不同,这就不能达到公用的目的。

左边

data = 8 * rand(10);
pcolor(data)
colormap(jet(8))
caxis([0,16])
h = colorbar

右边

data = 8 * rand(10);
pcolor(data)
colormap(jet(8))
caxis([0,8])
h = colorbar


两者的差异在于,色阶划分数目相同,但是上下限不同。 固定caxis之后,数据颜色会依据colorbar的色阶进行匹配,而不再根据自己的数据范围进行调整了!

提醒:多个子图时,最好先确定所有子图数据的最大值和最小值,统筹考虑caxis的min 和 max


  • set(Colorbar_Handle, ‘Limits’, [min,max])
    这个参数可以理解为figure为一个窗户,也就是我们看坐标轴的“视野范围”,它并不影响数据画图本身,但是会影响到我们所能看到的画面。例如:
data = 8 * rand(10);
pcolor(data)
colormap(jet(16))
caxis([0,16])
h = colorbar
set(h, 'Limits', [0,10]); % 该句限定了colorbar “视野”上限,但其并不影响色阶的划分!只是我们看到的少了而已。如黄色10刻度对应的并没有改变。

在这里插入图片描述


  • set(Colorbar_Handle, ‘Ticks’, [一维向量])
    这个参数是用于 ”显示“ 刻度,刻度是根据colorbar数轴上刻度。一旦colormap(jet(16)) 和 caxis([0,16]) 确定,那每个刻度与色阶的对应关系其实就确定了!Ticks只负责显示与否[一维向量] 可以是等距数列,如 linspace(17); 但可以是不等距的向量,如[0 2 6 12 16]
    在这里插入图片描述
set(Colorbar_Handle, 'Ticks', [0 2 6 12 16]);

在这里插入图片描述


  • set(Colorbar_Handle, ‘TickLabels’, {‘Aa’ ‘Bb’ ‘Cc’ ‘Dd’ ‘Ee’})
    这个参数一般是和 ‘Ticks’ 成对出现,用于“标识” Ticks显示的刻度,注意这只是一个标签,即便是 {‘Aa’ ‘Bb’ ‘Cc’ ‘Dd’ ‘Ee’} 或者[100 220 336 522 999],这仅仅表示标签,不和数轴上的真实刻度对应,仅按照Ticks显示的刻度的顺序进行贴“标签”。
    在这里插入图片描述
    在这里插入图片描述

公用colorbar的思路总结:

1.以所有需要公用colorbar的子图的数据为准,得出其总的最大值和最小值,确定caxis的 min 和 max;
2.subplot 每个子图,但不显示colorbar; / 或者每个都画colorbar
3. 单独找个位置画colorbar

colormap(jet); 
colorbar('Position',[0.9 0.1 0.015 0.85],'LineWidth',1.0,'FontSize',12) 
% 若需要共用应该根据全部图形的min和max确定colorbar的范围
hc=colormap(jet(10)) % 若将整个颜色等分10段,当然也可不分;
caxis([allmin,allmax]) % 找到全部子图的最小值和最大值替换allmin allmax
set(hc,'Ticks',allmin:step:allmax) % 显示刻度
set(hc,'TickLabels',{对应Ticks的维度}) % 贴标签

在这里插入图片描述

colorbar 的属性

c = colorbar;
c.LineWidth = 1.5; 或者

set(c, ‘LineWidth’, 1.5)


刻度和标签
  • Ticks - 刻度线位置
    由单调递增数值组成的向量

刻度线位置,指定为单调递增数值向量。这些值的间隔无需相等。如果不希望显示刻度线,请将该属性设置为空向量 []。
示例: [-1,0,1,2,3,4,5]
数据类型: single | double

  • TickLabels - 刻度线标签
    字符向量元胞数组 | 字符串数组 | 数值数组 | 字符向量 | 分类数组

刻度线标签,指定为字符向量元胞数组、字符串数组、数值数组、字符向量或分类数组。默认情况下,颜色栏用数值标注刻度线。如果您
指定标签而不为所有刻度线指定足够的标签,则 MATLAB® 循环使用这些标签。
如果将此属性指定为分类数组,MATLAB 将使用数组中的值,而不是类别。
示例: {‘cold’,‘warm’,‘hot’}

  • Limits - 最小和最大刻度线值
    二元素向量

最小和最大刻度线值,指定为二元素向量。第二个向量元素必须大于第一个元素。
示例: [0 1]
数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

  • Label - 标签
    文本对象

    沿着颜色栏显示的标签,以文本对象的形式返回。该文本对象包含的属性可以控制标签外观和显示的文本。使用 Label 属性访问文本对象,例如:

c = colorbar;
c.Label

  ans =  
   Text with properties:
             String: ''
           FontSize: 10
         FontWeight: 'normal'
           FontName: 'Helvetica'
              Color: [0.1500 0.1500 0.1500]
HorizontalAlignment: 'left'
           Position: [0 0 0]
              Units: 'data'
Show all properties

要添加标签或更改标签,请为文本对象设置 String 属性,例如:

c.Label.String = ‘Label Text Goes Here’;

要更改标签外观,例如字体样式或字体颜色,请设置其他的文本属性。例如,下面的代码可以更改字体大小。

c.Label.FontSize = 12;

  • Direction - 色阶的方向
    ‘normal’ (默认) | 'reverse’

色阶的方向,指定为下列值之一:
‘normal’ - 显示颜色图和标签(对于垂直颜色栏,自下而上上升;对于水平颜色栏,自左向右上升)。
‘reverse’ - 显示颜色图和标签(对于垂直颜色栏,自下而上下降;对于水平颜色栏,自左向右下降)。

  • TickLength - 刻度线长度
    0.01 (默认) | 标量

刻度线长度,指定为标量。将刻度长度指定为颜色栏轴长度的一部分。
示例: 0.05
数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

  • TickDirection - 刻度线方向
    ‘in’ (默认) | 'out’

刻度线方向,指定为下列值之一:
‘in’ 在颜色栏框内部显示刻度线。
‘out’ 在颜色栏框外部显示刻度线。


字体
  • FontName - 字体名称
    支持的字体名称 | 'FixedWidth’

字体名称,指定为支持的字体名称或 ‘FixedWidth’。要正确显示和打印文本,您必须选择系统支持的字体。默认字体取决于您的操作系统和区域设置。

  • FontSize - 字体大小
    大于 0 的标量值

字体大小,指定为大于 0 的标量值(以磅为单位)。默认字体大小取决于具体操作系统和区域设置。
如果您更改坐标区字体大小,MATLAB 会自动将颜色栏的字体大小设置为坐标区字体大小的 90%。如果手动设置了颜色栏的字体大小,则更改坐标区字体大小不会影响颜色栏的字体。

  • FontWeight - 字符粗细
    ‘normal’ (默认) | 'bold’

字符粗细,指定为 ‘normal’ 或 ‘bold’。
MATLAB 使用 FontWeight 属性从系统提供的字体中选择一种字体。并非所有字体都有加粗字体。因此,指定加粗字体仍可能得到普通字体。


位置
  • Location - 相对于坐标区的位置
    ‘eastoutside’ (默认) | ‘north’ | ‘south’ | ‘east’ | ‘west’ | ‘northoutside’ | …'

相对于轴的位置,指定为下表中所列的值之一。

表示的位置表示的方向
‘north’坐标区的顶部水平
‘south’坐标区的底部水平
‘east’坐标区的右侧垂直
‘west’坐标区的左侧垂直
‘northoutside’坐标区的顶部外侧水平
‘southoutside’坐标区的底部外侧水平
‘eastoutside’坐标区的右外侧(默认值)垂直
‘westoutside’坐标区的左外侧垂直
‘manual’由 Position 属性确定垂直

要在不出现在表中的位置显示颜色栏,请使用Position 属性指定自定义位置。如果设置 Position 属性,则 MATLAB 将 Location 属性设置为 ‘manual’。当 Location 属性设置为 ‘manual’ 时,关联坐标区不会调整大小以适应颜色栏。

-Position - 自定义位置和大小
四元素向量

自定义位置和大小,指定为 [left, bottom, width, height] 形式的四元素向量。left 和 bottom 元素指定图窗左下角到颜色栏左下角的距离。width 和 height 元素指定颜色栏的维度。Units 属性确定位置单位。

如果指定 Position 属性,则 MATLAB 将 Location 属性更改为 ‘manual’。当 Location 属性为 ‘manual’ 时,关联坐标区不会调整大小以适应颜色栏。
示例: [0.1 0.1 0.3 0.7]

轮廓
  • Box - 框轮廓
    ‘on’ (默认) | on/off 逻辑值

框轮廓,指定为 ‘on’ 或 ‘off’,或者指定为数值或逻辑值 1 (true) 或 0 (false)。值 ‘on’ 等效于 true,‘off’ 等效于 false。因此,您可以使用此属性的值作为逻辑值。该值存储为 matlab.lang.OnOffSwitchState 类型的 on/off 逻辑值。
‘on’ - 显示围绕颜色栏的框轮廓。
‘off’ - 不显示围绕颜色栏的框轮廓。

  • LineWidth - 框轮廓的宽度
    0.5 (默认) | 正值

框轮廓的宽度,指定为以磅为单位的正值。一磅等于 1/72 英寸。
示例: 1.5

可见性
  • Visible - 可见性状态
    ‘on’ (默认) | on/off 逻辑值

可见性状态,指定为 ‘on’ 或 ‘off’,或者指定为数值或逻辑值 1 (true) 或 0 (false)。值 ‘on’ 等效于 true,‘off’ 等效于 false。因此,您可以使用此属性的值作为逻辑值。该值存储为 matlab.lang.OnOffSwitchState 类型的 on/off 逻辑值。
‘on’ - 显示对象。
‘off’ - 隐藏对象而不删除它。您仍然可以访问不可见对象的属性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大雨海深

感谢您的支持和鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值