【问题标题】:Adding slider to heatmap - MATLAB向热图添加滑块 - MATLAB
【发布时间】:2021-02-02 14:04:47
【问题描述】:

我正在处理一个 3D 双精度模型,我想逐个切片进行可视化。 为此,我尝试绘制热图,然后添加一个滑块来选择第三维的索引。 但是,我收到以下错误: Error using uislider (line XX) HeatmapChart cannot be a parent.

重现我的问题的最小示例:

% Generate dummy 3d array
img = ones(5,4,3);
for ii=1:size(img,3)
    img(:,:,ii)=ii;
end
% Try plotting heatmap with slider
h = heatmap(img(:,:,1));
uislider(h)

实际上是否有一种方法/解决方法可以在热图上使用滑块? 谢谢!

【问题讨论】:

  • heatmap 不是uislider 的有效容器。您必须将uislider 附加到父figurepanel,然后将回调函数分配给uisliderValueChangedFcn 属性。在此回调函数中,您可以根据滑块值更新热图。

标签: matlab slider heatmap


【解决方案1】:

有。但我认为你不能为此使用 uislider。试试:

h = heatmap(img(:,:,1));
uicontrol('Style','slider');

此滑块具有类似的功能,但看起来不太好。你仍然可以定义 Min, Max, Color, ... 并实现回调函数。

最后可能是这样的:

h = heatmap(img(:,:,1));
uicontrol('Style','slider','Value',1,'Min',1,'Max',size(img,3),...
          'SliderStep',[0.5 0.5],'CallBack',{@SlideThroughSlices,img})

function SlideThroughSlices(slider,~,img)

   heatmap(img(:,:,slider.Value));

end

假设img的第三个维度的大小为3,否则需要调整Min、Max和SliderStep。

【讨论】:

  • 真的很酷!必须检查this answer 才能定义正确的 SliderStep,否则它工作得很好!第一次使用 uicontrol :)
  • 我会更改回调函数的名称:slice 已经是一个内置的 MATLAB 函数,鉴于您已经在使用 slices,您可能不想重载它.
  • @Hoki,好主意,不知道这是一个内置函数,谢谢
  • @nespereira Anytime :) 在 MATLAB 页面上,您还可以找到有关 uicontrol (de.mathworks.com/help/matlab/ref/uicontrol.html) 的良好信息。如果您尝试显示滑块的当前值并遇到困难,请告诉我,我会为您提供帮助。
猜你喜欢
  • 1970-01-01
  • 2021-10-10
  • 2012-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多