Mostrando las entradas con la etiqueta Gráficas. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Gráficas. Mostrar todas las entradas

sábado, 15 de noviembre de 2014

Modificando el color de línea de una gráfica generada con ezplot


La función ezplot es útil para trazar gráficas mediante una expresión definida simbólicamente o mediante una cadena de caracteres, lo cual, generalmente, facilita el trazo de las gráficas. Aunque lo más común es que un usuario de MATLAB comience utilizando la función plot para esta tarea, y con ello estará 'acostumbrado' a la posibilidad de incluir especificaciones de estilo, color y grosor de linea. Por ejemplo la siguiente instrucción trazará una gráfica de los vectores x e y utilizando una línea roja punteada:

plot(x,y,'r--');

No obstante, si se intenta hacer lo mismo con ezplot, MATLAB devolverá un error. La sintaxis más usual de ezplot es:

ezplot('f(x)', [a,b]);

Siendo a y b los extremos del intervalo a graficar. Ahora, se queremos personalizar la gráfica tendremos que hacer uso de la referencia (handle) a la linea graficada, para ello basta con asignar a una variable la instrucción de graficado, por ejemplo:

hL = ezplot('f(x)', [a,b]);

Con esta referencia guardada en la variable hL es posible utilizar la función set para modificar las propiedades de la linea. Véase el ejemplo siguiente:

hL = ezplot('sin(x)',[0 10]);
set(hL,'Color','r','LineStyle','--');







jueves, 10 de julio de 2014

Graficar inecuaciones / desigualdades en MATLAB


Una inecuación es una desigualdad algebraica que contiene una o más incógnitas, ejemplos de estas son las siguientes:

$$x^2+y^2>2$$
$$x+3>y$$
$$x^3+7<1$$

MATLAB no tiene soporte nativo para graficar desigualdades, pero evidentemente pueden implementarse soluciones mediante comparadores que evalúen los valores tomados por una cierta expresión en una región especificada. La siguiente función llamada inecgraf permite llevar a cabo dicha tarea:

function varargout = inecgraf(I,R)
% Grafica una desigualdad (inecuación) en un rango
% especificado.
%
% Argumentos de entrada:
%            I    -   Inecuación
%            R    -   Rango en el cual se trazará la
%                     gráfica.
%
% Argumentos de salida:
%            h    -   Si se especifica un argumento
%                     salida, la función devuelve un
%                     array de handles que le permite
%                     modificar las propiedades de la
%                     gráfica de salida. (Véase ejemplos).
%
% Ejemplos: 
%           >> inecgraf('x.^2+y.^2<10',[-5 5]);
%           >> h = inecgraf('y<x+3',[0 10]);
%           >> set(h,'color','r','MarkerSize',5);
%
% || Por: Jorge De Los Santos ||
% || Rev. 1.0  ||  Fecha: 06/05/14 ||

set(gca,'NextPlot','add');
axis([R(1) R(2) R(1) R(2)]);
dd=(R(2)-R(1))/50;
[x,y]=meshgrid(R(1):dd:R(2));
[f,c]=find(eval(I));
h=zeros(1,length(f));
for i=1:length(f)
    h(i)=plot(x(f(i),c(i)),y(f(i),c(i)),'b*','MarkerSize',2);
end
if nargout==1
    varargout{1}=h;
end
end


Las instrucciones de uso se muestran en la descripción de la función, enseguida se muestran los ejemplos obtenidos para las inecuaciones que se indican:

>> inecgraf('y>x.^2-2',[-5 5]);



>> inecgraf('x.^2+y.^2>5',[-5 5]);




martes, 8 de julio de 2014

Graficando un "toro" en MATLAB


Un toro es una superficie o sólido de revolución generado por la rotación de una circunferencia alrededor de un eje determinado.

Para nuestro caso utilizaremos la circunferencia de radio 1 y coordenadas de centro (1,2), cuya ecuación en coordenadas cartesianas sería:

$$(x-1)^2+(y-2)^2=1$$

La ecuación anterior está dada de forma implícita, pero para nuestros fines necesitamos la función de la circunferencia de forma explícita, lo cual nos conduce a despejar la variable dependiente "y" y expresar la circunferencia mediante las dos funciones que se muestran enseguida:

$$ \left\{ \begin{array}{cc} y_1=\sqrt{1-(x-1)^2}+2 \\ y_2=-\sqrt{1-(x-1)^2}+2 \end{array} \right. $$

Una vez comprendido lo anterior, podemos centrarnos en la función cylinder nativa de MATLAB que nos permite generar un sólido de revolución mediante la sintaxis:

>> cylinder(fun);

Donde "fun" es una función $f(x)$ y que sirve para establecer el perfil del sólido de revolución. Regresando a nuestro objetivo principal, enseguida se muestra el código necesario para generar la gráfica de un toro, utilizando las dos funciones mencionadas con anterioridad:

x=0:0.1:2;
f1=sqrt(1-(x-1).^2)+2;
f2=-sqrt(1-(x-1).^2)+2;
hold on
cylinder(f1);
cylinder(f2);
daspect([1 1 1]);
view(3);




martes, 27 de mayo de 2014

Trazar polígonos en MATLAB


La siguiente función permite trazar un polígono de N lados, siendo los argumentos de entrada el número de lados, el radio de la circunferencia en la cuál el polígono se encuentra inscrito, y las coordenadas del centro del polígono.

function h=poligono(N,r,cx,cy)
% Traza un polígono de N lados
t = (1/(2*N):1/N:1)*2*pi;
x = r*sin(t)+cx;
y = r*cos(t)+cy;
h=fill(x,y,'r');
axis square;
end

Enseguida se muestra un ejemplo para el polígono de 6 lados (hexágono):

>> poligono(6,1,0,0);


El usuario puede además hacer adecuaciones a la visualización del polígono utilizando el handles del mismo.


martes, 13 de mayo de 2014

Gráficas de barras


Las gráficas de barras es una forma de representar gráficamente un conjunto de datos o valores y está conformado por barras rectangulares de longitudes proporcionales a los valores representados.

Para nuestro ejemplo utilizaremos la información proporcionada por la siguiente tabla:

ASIGNATURA
CALIFICACIÓN
Álgebra
9
Geometría
9.5
Cálculo
10
Estática
8.5
Química
8

MATLAB proporciona la función bar para trazar gráficas de barras, que en su sintaxis más simple sólo necesita como argumento un vector con los datos a graficar, véase el ejemplo a continuación:

calificaciones=[9,9.5,10,8.5,8];
bar(calificaciones);


Lo anterior resulta muy sencillo, pero aún carece de información acerca de los datos que se están mostrando. Para añadir una etiqueta a cada dato o barra que se grafica modificaremos la propiedad XTickLabel del axes al cuál pertenece el diagrama de barras, en nuestro ejemplo esas etiquetas serían el nombre de cada asignatura. Definimos las etiquetas utilizando un cell array, veáse el ejemplo:

asignaturas={'Álgebra','Geometría','Cálculo','Estática','Química'};
calificaciones=[9,9.5,10,8.5,8];
h=bar(calificaciones);
set(gca,'XTickLabel',asignaturas);


Modificar el ancho y color de las barras.

Para modificar el ancho de las barras basta con pasar como segundo argumento de la función bar un valor escalar entre 0 y 1, la sintaxis sería:

bar(X,k);

Donde X es el vector que contiene los valores y k un escalar en el intervalo 0 a 1.

Por defecto MATLAB utiliza el color azul para las gráficas de barras, pero existe la posibilidad de cambiar el color a conveniencia del usuario. Para ello puede especificarse el color como un segundo argumento de la función bar, mediante un especificador de color ('r','g','b','k',...), con la sintaxis:

bar(X,'color');

Donde X es el vector de valor y 'color' el especificador de color mediante caracteres. 

Si requiere modificar el grosor y color a la vez, puede usar la siguiente sintaxis:

bar(X,k,'color');

El siguiente ejemplo muestra una gráfica de barras con el ancho y color modificados:


asignaturas={'Álgebra','Geometría','Cálculo','Estática','Química'};
calificaciones=[9,9.5,10,8.5,8];
bar(calificaciones,0.4,'r');
set(gca,'XTickLabel',asignaturas);
title('Calificaciones');


Gráficas de barras múltiples.

En ocasiones se necesita representar más de un valor asociado a una misma característica, para ello es posible graficar diagramas de barras utilizando matrices en lugar de un vector, en donde cada fila proporciona los valores de una misma característica y cada columna pertenece a una categoría distinta entre los valores. Para nuestro ejemplo utilizaremos la tabla mostrada enseguida.

ALUMNO
CALIFICACIONES
MATEMÁTICAS
FÍSICA
QUÍMICA
Ana
10
7
9
Jorge
8
8
10
Javier
9
9
8


En la tabla anterior cada alumno tiene tres calificaciones asociadas en diferentes asignaturas. El siguiente ejemplo muestra cómo trazar la gráfica de barras correspondiente:


nombres={'Ana','Jorge','Javier'};
Ana=[10,7,9];
Jorge=[8,8,10];
Javier=[9,9,8];
bar([Ana;Jorge;Javier]);
set(gca,'XtickLabel',nombres);


viernes, 28 de marzo de 2014

Gráficas en tres dimensiones en MATLAB (Superficies, Curvas en el espacio, Planos)


Superficies

Utilizando matrices

Una manera de graficar superficies es utilizar matrices y representarlas mediante funciones disponibles en MATLAB. Para ello debe definirse previamente una malla bidimensional utilizando el comando meshgrid, cuyos argumentos son los intervalos de las variables independientes, por ejemplo suponga que quiere graficarse la siguiente función:

$$f(x,y)=x^2+y^2$$

[X,Y]=meshgrid(-5:0.1:5);
Z=X.^2+Y.^2;
surf(X,Y,Z);


De forma simbólica

Otra forma de obtener el mismo resultado que el caso anterior, es proceder de manera simbólica. Una de las funciones que permite esto es ezsurf, cuya forma es la siguiente:

ezsurf('x^2+y^2',[-5 5]);


Como puede observarse, se necesitan menos líneas de código bajo este método.


Curvas en el espacio

Para graficar curvas en el espacio se dispone del comando plot3, cuyos argumentos son las ecuaciones paramétricas de la curva, tómese como ejemplo la siguiente curva (helice circular):

$$ x(t)=cos(t) \,\,\,\,\,\,\,\,\, y(t)=sin(t)  \,\,\,\,\,\,\,\,\, z(t)=t $$

t=linspace(0,10*pi,200);
x=cos(t);
y=sin(t);
z=t;
plot3(x,y,z,'linewidth',2);

Puede utilizar la forma simbólica para obtener un resultado similar al anterior con el comando ezplot3, tal como sigue:

ezplot3('cos(t)','sin(t)','t',[0 10*pi]);


Planos

El siguiente ejemplo muestra como graficar un plano $z=constante$, para ello se utiliza el comando fill3.

hold on
ezsurf('x^2+y^2',[-5 5]);
k=20;
A=[-5 -5 k];
B=[-5 5 k];
C=[5 5 k];
D=[5 -5 k];
X=[A(1) B(1) C(1) D(1)];
Y=[A(2) B(2) C(2) D(2)];
Z=[A(3) B(3) C(3) D(3)];
fill3(X,Y,Z,[0.7 0.7 0.7]);
view(3);




















miércoles, 19 de marzo de 2014

Puntos aleatorios dentro de una circunferencia


Esta función permite dibujar puntos distribuidos aleatoriamente dentro de una región delimitada por una circunferencia. El radio de la circunferencia y el número de puntos son los argumentos de entrada.


function circ_punt(r,N)
% Donde:
%   r : radio del círculo
%   N : número de puntos aleatorios
%
% Ej:   >> circ_punt(10,200);

t=linspace(0,2*pi,1000);
x=r*cos(t);
y=r*sin(t);
hold on
plot(x,y,'linewidth',2);
k=1;
while k <= N
    px=randi([-100*r,100*r])/100;
    py=randi([-100*r,100*r])/100;
    ifsqrt(px^2+py^2)<r
        plot(px,py,'.r')
        k=k+1;
    end
    axis([-(r+1) r+1 -(r+1) r+1]);
    axis('square');
end    
end


La siguiente imagen es el resultado de la ejecución con r=10 y N=200: