在保持轴旋转的同时更新绘图?

时间:2015-12-02 19:42:08

标签: matlab plot rotation axes

到目前为止,我有一个3d图,可以在Kessel Run的Monto-Carlo模拟过程中实时更新。我希望绘图在更新时可以旋转,但启用rotate3d标志后,当我在更新绘图数据后调用drawnow时,它会将轴旋转重置为默认方向,取消用户更改的任何内容它来。我的相关代码如下:

s = scatter3(pg(:,1), pg(:,2), pg(:,3), 'O', 'filled');
set(s, 'MarkerEdgeColor', 'none', 'MarkerFaceColor', 'k');

hold on

p_x = curr_path(:,1);
p_y = curr_path(:,2);
p_z = curr_path(:,3);

p = plot3(p_x, p_y, p_z);
set(p, 'LineWidth', 2, 'Color', 'k');

p_x = longest.path(:,1);
p_y = longest.path(:,2);
p_z = longest.path(:,3);

p = plot3(p_x, p_y, p_z);
set(p, 'LineWidth', 2, 'Color', 'r');

p_x = shortest.path(:,1);
p_y = shortest.path(:,2);
p_z = shortest.path(:,3);

p = plot3(p_x, p_y, p_z);
set(p, 'LineWidth', 2, 'Color', 'b');

sample_str = sprintf('%d samples', sample);
short_str = sprintf('shortest: %g parsecs', shortest.dist);
long_str = sprintf('longest: %g parsecs', longest.dist);

title(sprintf('%s, %s, %s', sample_str, short_str, long_str));

xlim([-10 10]);
ylim([-10 10]);
zlim([-10 10]);

hold off

drawnow

每次更新绘图上绘制的数据时都会执行此操作。我可以添加什么来确保在更新期间保持轴旋转?

2 个答案:

答案 0 :(得分:1)

我希望我理解你的问题吧。嗯,好了!

我认为问题与使用plot3有关,figure; x = randn(10,3); p = plot3(x(:,1), x(:,2), x(:,3)); drawnow pause; %// do rotations in the figure GUI, press a button when done x = randn(10,3); p = plot3(x(:,1), x(:,2), x(:,3)); %// rotations reset drawnow; pause 显然会将图的视图设置重置为默认设置。

我使用以下程序验证了这一点:

plot3

您可以在暂停处于活动状态时旋转图形,但是当释放暂停并且第二次调用XData时,旋转设置将被重置。

避免重置的解决方案是直接更新已绘制图形对象中的YDataZDatafigure; x = randn(10,3); p = plot3(x(:,1), x(:,2), x(:,3)); drawnow pause; %// do rotations in the figure GUI, press a button when done x = randn(10,3); set(p, 'XData', x(:,1), 'YData', x(:,2), 'ZData', x(:,3)); %// no reset! drawnow; pause 。这可以通过以下方式实现:

var error = new Error('BOOM!');
StackTrace.fromError(error).then(callback).catch(errback)
=> Promise(Array[StackFrame], Error);

因此,无论您拥有什么代码,都可以使用图形对象的句柄直接更新line properties以避免重置。

答案 1 :(得分:0)

我遇到了同样的问题,在Matlab 2015b中你可以用这种简单的方式解决它。

[System.Web.Services.WebMethod]
   public async static Task<string> checkout()

    {

        string r = await afrekenen();

        return r;
    }