我根据我的数据开发了一个包含15个条目的新R,G,B色彩图。这些条目在单调增长序列中在[0.0,1.0]
范围内变化,并且表示与15个样本相关联的参数P的值。例如,3对(P,样本号)将是(0.0,266); (0.5,262); (1.0,276)
。
问题:我希望P在颜色栏中从红色显示为蓝色,但是'ticks'标记15个样本的数字。
在this post中讨论了如何操纵colorbar的'YTickLabel'。
在MathWorks的this second post中,通过调用颜色条句柄cbr
并使用set(cbr,'YTick',20:2:50)
- 可以轻松实现更改刻度数量的解决方案 - 如其中所述。然而,听起来我觉得两种方式都很好,因为数据是单调的并且有少量的滴答声。
在我的情况下,P单调增长,但与它们相关的样本数字却没有。此外,有15个滴答。
然后,有人建议我如何才能正确放置这15个刻度线并与“southoutside”位置一起使用以使颜色条处于水平位置?
我的尝试如下:对于这两种情况,colorbar的打印次数不超过8次。我也没有成功使用'YTick',因为样本数字不是单调的。
更“花哨”的方式:
samplex = [ 266, 267, 265, ..., 262, 276 ]; % vector of 15 sample numbers
sx = num2str(samplex);
sx = cellstr(sx);
hx = colorbar;
set(hx,'YTickLabel',sx)
逐点添加
hx = colorbar;
set(hx,'YTickLabel',{'266','262',...,'276'})
Colormap矩阵:这是CX
中名为format short
的色彩映射矩阵:
CX =
0.5397 0 0
1.0000 0.4603 0
1.0000 0.5714 0
0.4603 1.0000 0.5397
0.4286 1.0000 0.5714
0 0.9206 1.0000
0 0.2857 1.0000
0 0.1905 1.0000
0 0.1905 1.0000
0 0.0476 1.0000
0 0 0.9683
0 0 0.9683
0 0 0.9524
0 0 0.7143
0 0 0.5079
然后,我使用
cx = colormap(CX);
axis off;
set(gcf,'color','None');
在我的尝试中引用set
命令之前。
感谢您的帮助。
备注:我只需要设置颜色条,然后将其导出到.pdf,没有背景颜色,图形或轴。这一步没问题。这是一个示例图:
答案 0 :(得分:2)
您想要修改由colorbar
创建的对象的Ticks
和TickLabels
属性:
例如:
CX = [0.539700, 0.000000, 0.000000; ...
1.000000, 0.460300, 0.000000; ...
1.000000, 0.571400, 0.000000; ...
0.460300, 1.000000, 0.539700; ...
0.428600, 1.000000, 0.571400; ...
0.000000, 0.920600, 1.000000; ...
0.000000, 0.285700, 1.000000; ...
0.000000, 0.190500, 1.000000; ...
0.000000, 0.190500, 1.000000; ...
0.000000, 0.047600, 1.000000; ...
0.000000, 0.000000, 0.968300; ...
0.000000, 0.000000, 0.968300; ...
0.000000, 0.000000, 0.952400; ...
0.000000, 0.000000, 0.714300; ...
0.000000, 0.000000, 0.507900];
cmap = colormap(CX);
cbar = colorbar;
给我们以下内容:
colorbar
的范围取决于axes
链接到的colorbar
对象中的值范围。对于空白轴,我们得到的颜色条范围为[0, 1]
。对于类似surf(peaks)
的内容,我们得到(大致)[-6.5 8.08]
。超出此范围的刻度将不会呈现。考虑到这一点,对于空白轴我们可以做类似的事情:
nticks = 15;
cbar.Ticks = 0:(1/nticks):1;
这给了我们:
然后我们可以相应地修改刻度标签:
% Generate Fibonacci sequence, because why not
a = zeros(1, nticks + 1);
a(1) = 1; a(2) = 1;
ii = 3;
while ii <= nticks + 1
a(ii) = a(ii-2) + a(ii-1);
ii = ii + 1;
end
cbar.TickLabels = a;
离开我们:
请注意,请参阅colorbar的文档:
刻度标记标签,指定为字符串,数字数组或字符串
的单元格数组
所以你不仅限于数字向量。
编辑:以上假定使用R2014b或更新版本以使用dot notation to access properties of graphics objects。
对于旧版本的MATLAB,请使用set
:
set(cbar, 'Ticks', 0:(1/nticks):1);
set(cbar, 'TickLabels', a);
产生相同的结果。