español matlab plot 2d line

español - plot matlab legend



Trama continua en MATLAB (3)

Puede usar el manejador de trazado y luego actualizar las propiedades ''XData'' y ''YData'' en consecuencia. Por lo tanto, puede trazar el primer punto antes del bucle y generar el manejador de la gráfica. Después de eso, el asa de la trama está disponible y la trama se puede ajustar dentro del ciclo.

n = 500; Fs = 1000; f1 = 10; t = (0 : n - 1) / Fs; s = zeros(size(t)); s(1) = sin(2 * pi * f1 * t(1)); figure handle = plot(s(1), t(1), ''bo-''); %// the plot handle for i = 2 : n s(i) = sin(2 * pi * f1 * t(i)); set(handle, ''XData'', t(1:i), ''YData'', s(1:i)) %// update the plot data axis([0 t(end) -1 1]); pause(0.1) %// small pause to see animation end

Tengo un bucle en mi código y quiero trazar algunas variables,

En cada iteración trazo un nuevo punto y quiero que se conecte al punto anterior.

Aquí hay un código de ejemplo (en este código, el ciclo es innecesario pero en el código real, no lo es).

n = 500; Fs = 1000; f1 = 10; t = 0; dt = 1 / Fs; for i = 1 : n s = sin(2 * pi * f1 * t); t = t + dt; plot(t,s,''bo''); hold on; axis([0 t(end) -1 1]); end

El correcto es lo que quiero.

Pensé en usar la line pero eso sería complicado (tendría que cambiar i y usar 4 puntos en cada comando de line ).

Parece una pregunta simple, tal vez me falta algo.

Gracias por cualquier ayuda.


Reemplazaría tu línea plot existente con esta

plot(t(1:i),s(1:i)); hold on;

Eso trazará todos los puntos del índice 1 hasta el índice actual. Luego, al eliminar el ''bo'' , trazará utilizando el formato predeterminado, que es la línea que desea.

Finalmente, si desea que esto esté realmente animado en la pantalla (como una película), tendrá que agregar un comando drawnow antes del final de su ciclo. También es posible que desee agregar una pause(0.25) después del sorteo, para insertar un retraso de un cuarto de segundo para que su ojo tenga la oportunidad de ver la imagen recién dibujada antes de que se sobrescriba en el siguiente dibujo de la imagen.


Esto es similar a la respuesta de @Nras, pero es más rápido y fácil de leer. Tengo varios programas que hacen este tipo de cosas, y dependiendo de cuánto tiempo sea el ciclo de cálculo, la actualización de gráficos puede ser realmente un cuello de botella importante y molesto.

Si sabe cuánto tiempo va a ser su vector en última instancia, puede preasignar su trazado y luego actualizar usando el comando handle :

n = 500; Fs = 1000; f1 = 10; t = 0; dt = 1 / Fs; s = nan(1,n); emptyvec = nan(1,n); h1 = plot(emptyvec,emptyvec,''-bo''); h2 = handle(line(emptyvec,emptyvec,''Color'',''r'',''Marker'',''x'',''LineStyle'',''--'')); h1 = handle(h1); for i = 1 : n t = t + dt; s = sin(2 * pi * f1 * t); h1.XData(i) = t; h1.YData(i) = s; h2.XData(i) = t; h2.YData(i) = s^2; drawnow end

MATLAB ignora ''nan'' al calcular los límites, por lo que la xlim con nan hace innecesaria la llamada a xlim . Además, la pause es necesaria cuando ejecuto esto. Su experiencia puede ser diferente. Personalmente prefiero hacer algo como esto:

h = plot(t,emptyvec);

Mientras t se conozca y no sea locura, esto me da una idea de cómo funciona el cálculo, pero también me da una especie de barra de progreso. Si es una locura, podría poblar t en fragmentos o usar XData e YData como un buffer circular usando ii = mod(i,100); como el índice (por ejemplo), que producirá un efecto tipo osciloscopio. Además, hay una penalización de tiempo para recalcular constantemente los límites del eje.

Si no sabe por cuánto tiempo será su vector (por ejemplo, si está en un ciclo while), puede preasignar con un vector que sepa que será más largo, asignarlo en fragmentos, o simplemente hacer el buffer circular.

Para parcelas múltiples, preasignar el uso de la función de line para cada línea adicional. A diferencia de la plot , puede envolver directamente la función de line más primitiva en la función de handle .

Tenga en cuenta que si usa MATLAB 2014b o superior (no lo soy), el nuevo sistema de gráficos HG2 usa objetos para identificadores en lugar de duplicados, por lo que el comando de handle , que convierte el manejador numérico a un manejador de objetos, es superfluo y la notación de puntos se puede usar directamente. También tenga en cuenta que el handle utilizado de esta manera no está documentado