移动绘图后重置轴?

Resetting axes after moving plots around?

我目前正在开发 GUI。我想要一个 'axes',我可以根据用户的选择在上面显示多个图。目前我有 2 个条形图和 2 个 surfc 图。我正在使用

设置地块
set(p1, 'Parent', axes1)

然而,当我将条形图设置为具有 surfc 的轴时,它看起来仍然存在 z 轴,同样的问题存在于相反的方向,但缺少 z 轴。此示例脚本演示。

figure(1);
a1 = axes();
p1 = bar(1:5);

figure(2);
a2 = axes();
x = [1 2];
z = zeros(2);
p2 = surfc(x, x, z);

set(p1, 'Parent', a2)
set(p2, 'Parent', a1)

解决此问题的最佳方法是什么?

如果您只使用一个轴,那么当您从 3D(对于 surfc 图)更改为 2D(bar情节)。

% Default 2D View
view(hax, 2);

% Default 3D View
view(hax, 3);

如果您允许用户在两​​者之间切换,则可能不值得使用默认的 2D 和 3D 视图,而是在您的按钮点击回调中,将当前视图存储在一个变量中,然后在它们出现时返回绘图,它会保留用户应用的任何自定义视点。您可以通过以下方式获取当前观点:

[az, el] = view(hax);

小吐槽

此外,通常最好在构造时分配绘图对象的父级。大多数图形对象构造函数都接受 Parent parameter/value 对。这种方式更加稳健,因为这样绘图对象就不会绘制到错误的轴上。

fig1 = figure();
ax1 = axes('Parent', fig1);
p1 = bar(1:5, 'Parent', ax1);

fig2 = figure();
ax2 = axes('Parent', fig2);
p2 = surfc([1 2], [1 2], zeros(2), 'Parent', ax2);

在处理 MATLAB 图形时,我总是发现在创建坐标轴、绘图和其他图形对象时明确父级是有益的。永远不要依赖 gcagcf 等,因为如果用户以某种方式在渲染中间单击,这些都会改变。