0

我目前正在开发一个 GUI。我想有一个“轴”,我可以根据用户选择在其上显示多个图。目前我有 2 个条形图和 2 个 surfc 图。我正在使用

set(p1, 'Parent', axes1)

但是,当我将条形图设置为具有 surfc 的轴时,似乎仍然存在 az 轴,并且同样的问题存在于其他方面,但缺少 az 轴。此示例脚本演示。

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)

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

4

1 回答 1

1

如果您只使用单个轴,则可以在从 3D(用于绘图)更改为 2D(绘图)时更改视图surfcbar

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

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

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

[az, el] = view(hax);

迷你咆哮

此外,通常最好在构造时指定绘图对象的父级。大多数图形对象构造函数都接受Parent参数/值对。这种方式更加健壮,因为绘图对象永远不会被绘制到错误的轴上。

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 图形时,我一直发现在创建坐标区、绘图和其他图形对象时明确父级是有益的。永远不要依赖gca,gcf等,因为如果用户在渲染过程中以某种方式单击,这些都会改变。

于 2016-03-07T16:14:01.530 回答