我知道可以通过单击clustergram
GUI中的颜色条图标来插入颜色条。有没有办法以编程方式进行?
我试过了
cgo = clustergram(data)
colorbar;
这会在新的图形窗口中生成一个颜色条。如何在clustergram
图中正确定位颜色条,就像点击按钮一样?
答案 0 :(得分:5)
有一个隐藏的功能(HeatMap.plot>showColorbar
),它将colorbar
整齐地定位在热图和树形图(线条)的左侧。只运行colorbar(...)
会弄乱树形图和热图的相对位置。因此,您需要以某种方式运行回调或仔细复制所有位置计算。运行回调更容易。这是怎么回事。
要以编程方式为colorbar
,创建clustergram
并保持颜色栏按钮同步,您需要使用按钮指定的回调并设置按钮的状态。
创建clustergram
:
load filteredyeastdata
cgo = clustergram(yeastvalues(1:30,:),'Standardize','Row');
获取彩条按钮的句柄:
cbButton = findall(gcf,'tag','HMInsertColorbar');
获取按钮的回调(ClickedCallback
):
ccb = get(cbButton,'ClickedCallback')
ccb =
@insertColorbarCB
[1x1 clustergram]
它为我们提供了回调(@insertColorbarCB
)指定的函数的句柄,以及函数的第三个输入参数(clustergram
对象)。按钮的句柄和空事件对象隐含地是前两个参数。
将按钮状态更改为'on'
(单击):
set(cbButton,'State','on')
运行回调以创建颜色栏:
ccb{1}(cbButton,[],ccb{2})
请注意,按钮State
必须先更改为'on'
,否则回调将无法执行任何操作。
答案 1 :(得分:1)
我设法解决了这个问题。 我做了什么:
我将此函数添加到了簇代码中(我将其放在第1486行)
%%%%%%%%%%%%%%
function insertColorbarCBALWAYS(obj)
hFig= gcbf;
obj.Colorbar = true;
end
%%%%%%%%%%%%%%%
然后在clustergram.m文件的第415行我添加了这行代码
insertColorbarCBALWAYS(OBJ);
调用上面的函数。保存并继续:现在,一旦绘制了簇图,颜色条将始终存在。 以前的方法不适合我,所以我做了这个解决方法。 甚至可以将新的簇图代码保存为clustergramCM,以便您可以以两种方式绘制cgram。