varias una superponer punto para marcar leyenda graficas graficar grafica funciones comandos comando matlab 3d plot axes

una - subplot matlab



¿Es posible vincular los ejes de dos gráficos de superficie para la rotación en 3D? (2)

Digamos que tengo dos matrices bidimensionales de igual tamaño y creo una gráfica de superficie para cada una de ellas.
¿Hay alguna manera de vincular los ejes de ambos gráficos, de modo que uno pueda rotarlos en 3D simultáneamente en la misma dirección?


Jugar con ActionPostCallback y ActionPreCallback es ciertamente una solución, pero probablemente no la más eficiente. Se puede usar la función linkprop para sincronizar la propiedad de posición de la cámara.

linkprop([h(1) h(2)], ''CameraPosition''); %h is the axes handle

linkprop puede sincronizar cualquiera de las propiedades gráficas de dos o más axes (2D o 3D). Se puede ver como una extensión de la función linkaxes que funciona para trazados 2D y sincroniza solo los límites de los axes . Aquí, podemos usar linkprop para sincronizar la propiedad de posición de la cámara, CameraPosition , la que se modifica cuando uno gira un axes .

Aquí hay un código

% DATA [X,Y] = meshgrid(-8:.5:8); R = sqrt(X.^2 + Y.^2) + eps; Z1 = sin(R)./R; Z2 = sin(R); % FIGURE figure; hax(1) = subplot(1,2,1); %give the first axes a handle surf(Z1); hax(2) = subplot(1,2,2); %give the second axes a handle surf(Z2) % synchronize the camera position linkprop(hax, ''CameraPosition'');

Puede tener una lista de propiedades gráficas con

graph_props = fieldnames(get(gca));


Una forma es registrar una devolución de llamada en eventos de rotación y sincronizar el nuevo estado en ambos ejes.

function syncPlots(A, B) % A and B are two matrices that will be passed to surf() s1 = subplot(1, 2, 1); surf(A); r1 = rotate3d; s2 = subplot(1, 2, 2); surf(B); r2 = rotate3d; function sync_callback(~, evd) % Get view property of the plot that changed newView = get(evd.Axes,''View''); % Synchronize View property of both plots set(s1, ''View'', newView); set(s2, ''View'', newView); end % Register Callbacks set(r1,''ActionPostCallback'',@sync_callback); set(r1,''ActionPreCallback'',@sync_callback); set(r2,''ActionPostCallback'',@sync_callback); set(r2,''ActionPreCallback'',@sync_callback); end