miércoles, 10 de noviembre de 2010

Opciones más importantes en un gráfico de 2 dimensiones

En la siguiente entrada resumo algunas de las opciones más importantes, a la hora de editar un gráfico.

Como ejemplo, vamos a representar la curva siguente:

y = A·sin(τ·t/T + φ)



En un principio, podemos escribir algo así:

t = [0:0.01:4]';
y = 1.2*sin(2*pi*t/12);


figure(1)
hold on
box on
plot(t,y,'-r')



Este gráfico está bastante pobre y se puede mejorar bastante. Por cierto, una de las cosas que menos me gusta, es que las cifras significativas cambian en los ejes.

figure(1)
hold on
box on
plot(t,y,'-','LineWidth',2,'Color',[1 0 0])
axis ([0 4 0 1.5])
xlabel('x')
ylabel('y')
title('y = 1.2 \cdot sin (2\pi /12 \cdot (t + \phi))')
set(gca,'XTick',[0:1:4])
set(gca,'XTickLabel',{'0','1','2','3','4'})
set(gca,'YTick',[0:0.5:1.5])
set(gca,'YTickLabel',{'0.0','0.5','1.0','1.5'})
set(gca,'Fontsize',10)
set(gca,'XGrid','on','YGrid','on')
legend({'\phi = 0'},2,'FontSize',10,'EdgeColor',[1 1 1]);


- Con "'XTickLabel',{}", editamos los números de cada eje (x en este caso). En vez de números, usamos strings, y solucionamos a mano el problema de las cifras significativas.

- Con "'EdgeColor',[1 1 1]" ponemos en blanco la caja de la leyenda.

- Las letras griegas y muchos símbolos matemáticos se pueden poner con los mismos comandos de LaTeX (como se ve en el título).

- El número "2" en la leyenda, corresponde al segundo cuadrante. Se puede poner 1, 2, 3 o 4.

- Se puede elegir entre varios tipos de línea distintos: - : -- -.

El resto de comandos, creo que son bastante intuitivos.

Por cierto, Matlab distorsiona las distancias relativas de cada eje. Para poner los ejes en la misma escala, se puede poner "axis equal".



Si queremos representar puntos sueltos, algunas de las opciones que podemos editar son el tamaño, grosor y relleno:

t = [0.5:0.5:3.5]';
y1 = 1.2*sin(2*pi*t/12);
y2 = 1.2*sin(2*pi*(t+1)/12);

figure(1)
hold on
box on
plot(t,y1,'o','MarkerSize',10,'LineWidth',2,'Color',[1 0 0])
plot(t,y2,'o','MarkerSize',5,'Color',[0 0 1],'MarkerFaceColor',[0 0 1])

Se puede elegir entre varios tipos de puntos: . o x + * s d v ^ < > p h




A veces queremos representar, además del valor, su error asociado. En vez de plot, usamos "errorbar".

t = [0.5:0.5:3.5]';
y1 = 1.2*sin(2*pi*t/12);
n = length(t);
xe = 0.05*rand(n,1)+ 0.05;

figure(1)
errorbar(t,y1,xe,'.','MarkerSize',5,'LineWidth',0.5,'Color',[1 0 0])







Otras posibilidades que tenemos, son el área bajo la curva, barras para cada punto, o una curva en forma de escalera:

t = [0.5:0.5:3.5]';
y = 1.2*sin(2*pi*t/12);

figure(1)
area(t,y,'FaceColor',[0.17 0.50 0.34]);


figure(1)
bar(t,y,'FaceColor',[0.7 0.8 1]);



figure(1)
stairs(t,y,'Color',[0.6 0.2 0],'LineWidth',2);




Por último, muestro dos ejemplo de cómo representar varias curvas distintas, usando un bucle for. Fíjate, cómo defino la leyenda y los distintos colores para cada curva.

phi = [0 1 2 3 4 5 6];
n = length(phi);
colores = [1 0 0;  1 0.6 0.2; 0.75 0.75 0; 0.17 0.51 0.34; 0.04 0.52 0.78; 0 0.75 0.75; 0.48 0.06 0.89];

t = [0:0.01:4]';

q = cell(1,n);

figure(2)
hold on
box on
for i=1:1:n
    y = 1.2*sin(2*pi*(t+phi(i))/12);
    plot(t,y,'-','LineWidth',2,'Color',colores(i,:))
    q(i) = {['\phi = ' mat2str(phi(i))]};
end
axis([0 4 -1.5 1.5])
xlabel('x')
ylabel('y')
title('y = 1.2 \cdot sin (2\pi /12 \cdot (t + \phi))')
set(gca,'XTick',[0:1:4])
set(gca,'XTickLabel',{'0','1','2','3','4'})
set(gca,'YTick',[-1.5:0.5:1.5])
set(gca,'YTickLabel',{'-1.5','-1.0','-0.5','0.0','0.5','1.0','1.5'})
set(gca,'Fontsize',10)
set(gca,'XGrid','on','YGrid','on')
legend(q,3,'FontSize',10)



phi = [0:0.5:7.5];
phitext = {'0.0','0.5','1.0','1.5','2.0','2.5',...
    '3.0','3.5','4.0','4.5','5.0','5.5',...
    '6.0','6.5','7.0','7.5'}
n = length(phi);
colores = [1 0 0;  1 0.6 0.2; 0.75 0.75 0; 0.17 0.51 0.34; 0.04 0.52 0.78; 0 0.75 0.75; 0.48 0.06 0.89];

t = [0:0.01:4]';
nt = length(t);

q = cell(1,n);

figure(1)
set(0,'DefaultAxesColorOrder',colores, 'DefaultAxesLineStyleOrder','-|--|:')

hold on
box on
y = zeros(nt,n);
for i=1:1:n
    y(:,i) = 1.2*sin(2*pi*(t+phi(i))/8);
    q(i) = {['\phi = ' cell2mat(phitext(i))]};
end
plot(t,y)

axis([0 4 -1.5 1.5])
xlabel('x')
ylabel('y')
title('y = 1.2 \cdot sin (2\pi /8 \cdot (t + \phi))')
set(gca,'XTick',[0:1:4])
set(gca,'XTickLabel',{'0','1','2','3','4'})
set(gca,'YTick',[-1.5:0.5:1.5])
set(gca,'YTickLabel',{'-1.5','-1.0','-0.5','0.0','0.5','1.0','1.5'})
set(gca,'Fontsize',10)
legend(q,'Location','EastOutside','FontSize',10)

- En este segundo caso, defino la secuencia de colores y tipo de curvas, que van a ir teniendo las curvas. Luego, calculo una matriz con todas las curvas.

- En la leyenda, los valores de phi los calculo como strings, para poner correctamente las cifras significativas.

No hay comentarios: