在clustergram中以编程方式打开colorbar

时间:2013-12-18 02:24:30

标签: matlab matlab-figure

我知道可以通过单击clustergram GUI中的颜色条图标来插入颜色条。有没有办法以编程方式进行? 我试过了

cgo = clustergram(data)
colorbar;

这会在新的图形窗口中生成一个颜色条。如何在clustergram图中正确定位颜色条,就像点击按钮一样?

2 个答案:

答案 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。