暂时展开(最大化)子图数字 - 然后将其折叠回来

时间:2014-08-13 05:11:40

标签: matlab matlab-figure expand subplot maximize-window

通常在Matlab中我们会绘制一个带有许多子图轴的图形,但它们都很小。

在流行的用户体验范例中,您可以双击这么小的情节,以便在整个屏幕空间中仔细观察。

通常这是我避免使用subplot的原因,而是绘制了许多单独的数字 - 所以我可以在屏幕上移动它们并双击它们的标题栏(在Windows上)将数字最大化为完整屏幕。 (再次双击,它将恢复正常大小。)

然而,subplot的优势在于将一组图分组在一个面板中。当我绘制许多这样的群体(每个群体都有十几个独立的子群轴)时,拥有那么多个人的数字变得难以使用。

那么,有没有办法在Matlab中启用此功能?

1 个答案:

答案 0 :(得分:1)

合并these three posts的部分内容,这是我目前所拥有的内容:

h = subplot(2,2,1);
line(1:10, rand(1,10));
set(h, 'buttondownfcn', ['h=gca; hc = copyobj(h, gcf);' ...
    'set(hc, ''Units'', ''normal'',' ...
    ' ''Position'', [0.05 0.1 0.8 0.85],' ...
    ' ''buttondownfcn'', ''delete(gca)'');']);

它并不完美,但它确实有效。

enter image description here

点击轴:

enter image description here

单击展开的轴,它将消失:

enter image description here

请注意,这仍然允许您平移,缩放和"旋转3D"得到的轴。选择箭头工具实际上会进入"编辑模式",因此最好取消选择您正在使用的工具。例如:如果您正在放大,请再次单击放大图标以取消选择该工具。然后点击将"崩溃"轴的爆炸。

到目前为止的限制是,您有时可以看到下面的基础小子图轴的部分。如果有人可以推荐一种优雅的方式来隐藏它们,那将是一个很好的改进。


编辑this answer学习(使用uipanel阻止其他内容显示),我现在已将解决方案变为:

gcaExpand.m

function gcaExpand

    set(copyobj(gca, uipanel('Position', [0 0 1 1])), ...
       'Units', 'normal', 'OuterPosition', [0 0 1 1], ...
       'ButtonDownFcn', 'delete(get(gca, ''Parent''))'); 

end

gcaExpandable.m

function gcaExpandable

    set(gca, 'ButtonDownFcn', [...
        'set(copyobj(gca, uipanel(''Position'', [0 0 1 1])), ' ...
        '    ''Units'', ''normal'', ''OuterPosition'', [0 0 1 1], ' ...
        '    ''ButtonDownFcn'', ''delete(get(gca, ''''Parent''''))''); ']);

end

第一个立即展开当前的情节。第二个添加功能,点击图表扩展它。在这两种情况下,再次点击会使事情恢复正常。

我已将它们放入目录,其中包含我日常使用的所有其他自定义Matlab功能。以上内容也可以包含在要发送的功能中。

最初,我打算编写自动应用subplot的{​​{1}}自定义版本,但这不起作用,因为像gcaExpandable这样的命令会删除{{1}属性(以及除位置之外的所有其他属性)。根据{{​​3}},我们可以通过将plot更改为ButtonDownFcn来避免重置这些属性,但这会产生副作用。例如,NextPlot不再自动重新调整轴。因此,迄今为止最干净的解决方案似乎如上所述。