Matlab - Modificación de axes

 
Vista:
sin imagen de perfil

Modificación de axes

Publicado por Álvaro (20 intervenciones) el 27/10/2016 16:47:11
Buenas tardes.

Necesito saber cómo, dentro de un bucle donde recalculo datos, puedo ir ploteando dichos datos cambiando únicamente esa propiedad del axes, ya que al inicio del bucle cambio las propiedades de nombres de ejes y título.

Muestro un ejemplo sencillo (repito que es un ejemplo, de ahí que no tenga sentido ese subplot, pero en mi caso real sí que es necesario):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
clc; clear all; close all
 
f1 = subplot(1,1,1);  f1.XLabel.String = 'Iteraciones'; ...
    f1.YLabel.String = 'Consumo (l/s)'; ...
    f1.Title.String = 'CONSUMO EN CADA NODO';
 
mat_C = [0 0 0 0];
plot(f1,mat_C)
 
for i = 1:10
    mat_C = mat_C + 1;
    % Lugar donde necesito insertar el código que me permita plotear los nuevos datos.
    pause(1E-20)
end

Espero haber podido expresar correctamente lo que necesito. He intentado usar refreshdata pero no funciona.

Muchas gracias.

Un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Modificación de axes

Publicado por Álvaro (20 intervenciones) el 27/10/2016 23:48:18
Buenas noches Jose Jeremías.

Lo que necesito es ir ploteando la evolución de la variable que modifico en el bucle, pero según tengo entendido, si únicamente cambio una determinada propiedad del axes (como hago al inicio con los nombres de los ejes) en lugar de utilizar la función plot, el código debería ser mucho más rápido.

Muchas gracias.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Modificación de axes

Publicado por Álvaro (20 intervenciones) el 28/10/2016 15:21:44
Creo que quizás ayude si digo un ejemplo de lo que he intentado y no funciona:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
clc; clear all; close all
 
f1 = subplot(1,2,1);  f1.XLabel.String = 'Iteraciones'; ...
    f1.YLabel.String = 'Consumo (l/s)'; ...
    f1.Title.String = 'CONSUMO EN CADA NODO';
 
f2 = subplot(1,2,2);  f2.XLabel.String = 'Iteraciones'; ...
    f2.YLabel.String = 'Altura (m.c.a.)'; ...
    f2.Title.String = 'ALTURA EN CADA NODO';
 
mat_C = [0 0 0 0];
mat_H = [0 0 0 0];
 
plot(f1,mat_C)
plot(f2,mat_H)
 
for i = 1:10
    mat_C = mat_C + 1;
    mat_H = mat_H + 1;
 
    plot(f1, mat_C);
    plot(f2, mat_H);
 
    pause(1E-20)
end

Si simplemente hago esto que indico aquí arriba, los nombres de los ejes se borran porque creo que estoy creando un nuevo axes o algo así, no estoy seguro.
Por lo tanto, lo que yo pretendo es cambiar sólo el campo de las estructuras f1 y f2 correspondiente que albergue los datos para plotear (no se si esto existe así tal cual).
Se que podría cambiar esas propiedades dentro del bucle obviamente, pero eso ralentiza el programa y quiero optimizarlo lo máximo posible, ya que en mi código real se emplea un cálculo iterativo bastante costoso.

Espero haberme explicado algo mejor.

Muchas gracias.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Modificación de axes

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 28/10/2016 16:10:54
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
clc; clear all; close all
f1 = subplot(1,2,1);
hold on
f1.XLabel.String = 'Iteraciones'; ...
f1.YLabel.String = 'Consumo (l/s)'; ...
f1.Title.String = 'CONSUMO EN CADA NODO';
 
f2 = subplot(1,2,2);
hold on
f2.XLabel.String = 'Iteraciones'; ...
f2.YLabel.String = 'Altura (m.c.a.)'; ...
f2.Title.String = 'ALTURA EN CADA NODO';
 
mat_C = [0 0 0 0];
mat_H = [0 0 0 0];
plot(f1,mat_C)
plot(f2,mat_H)
for i = 1:4
    mat_C = mat_C + 1;
    mat_H = mat_H + 1;
    plot(f1, mat_C);
    pause(1)
    plot(f1,mat_C,'w')
    plot(f2, mat_H);
    pause(1)
    plot(f2,mat_H,'w')
end
hold off

Al parecer lo que deseas hacer, seria a nivel programación en guide de matlab.
En este nivel programación actual, he hecho unos ajustes para que salga como lo deseas, pero el tiempo de ejecución pueda que sea mayor.


Saludos.
JOSE JEREMÍAS CABALLERO
Asesoría online en Matlab
Servicios de programación matlab
[email protected]
El correo es para servicios de programación, toda ayuda gratuita es vía foro.


http://matlabcaballero.blogspot.com
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar