Gráficos bidimensionales (I)
plot
Definimos un vector de datos, en la ventana Workspace pulsamos el botón derecho del ratón cuando el puntero está situado sobre el nombre de la variable y que guarda dichos datos. Seleccionamos en el menú flotante plot(y) para obtener la representación gráfica que vemos más abajo.
>> y=[0,0.38,0.71,0.92,1.00,0.92,0.71,0.38,0];
La representación gráfica es
En la ventana de comandos obtenemos la misma representación llamando al comando plot.
>> y=[0,0.38,0.71,0.92,1.00,0.92,0.71,0.38,0]; >> plot(y)
El comando plot(x,y) se utiliza para crear una representación gráfica bidimensional, donde x e y son vectores. Si se pasa solamente el vector y de los datos, plot(y), MATLAB entiende que xes el vector de los índices x=[1,2,3...]; tal como vemos en la figura anterior. Sea ahora,
>> x=[0 10 20 30 40 50 60 70 80]; >> y=[0 0.73 1.10 1.29 1.40 1.46 1.50 1.52 1.53]; >> plot(x,y)
Esto es todo lo que se precisa para hacer representación gráfica en la ventana denominada Figure Window: Proporcionar los vectores de datos x e y (que tienen que tener el mismo número de elementos) y la llamada al comando plot. Las decoraciones del gráfico (etiquetas en el eje X y en el eje Y, título, etc.) se pueden hacer mediante llamadas a comandos (xlabel, ylabel, title, etc.) o en la propia ventana gráfica, seleccionando los elementos apropiados del menú, en particular Tools->Edit Plot.
El comando plot tiene parámetros adicionales que nos permiten especificar el color y tipo de línea o los símbolos utilizados como marcadores. Por ejemplo
plot(x,y,'-mo','linewidth',2,'markersize',12, 'markeredgecolor','g','markerfacecolor','y')
Los dos primeros parámetros de plot son las coordenadas de los puntos (xi, yi) guardados en los vectores x e y. El tercer parámetro es el especificador de línea que puede contener tres datos '-mo' entre comillas simples:
- Estilo de línea (- significa sólido, por defecto)
- Color de línea (m significa magenta)
- Marcador (o significa círculo)
Las posibles opciones son:
Color | Símbolo | Estilo de línea | Símbolo |
---|---|---|---|
Azul (defecto) | b | Sólido (defecto) | - |
Verde | g | A puntos | : |
Rojo | r | raya-punto | -. |
Cian | c | rayas | -- |
Magenta | m | ||
Amarillo | y | ||
Negro | k | ||
Blanco | w |
Opciones de símbolos para marcar puntos en la gráfica
o | círculo | v | Triángulo (hacia abajo) |
. | punto | X | Triángulo (hacia arriba) |
x | marca X | < | Triángulo (hacia la izquierda) |
+ | más | > | Triángulo (hacia la derecha) |
* | estrella | p | pentagrama |
s | cuadrado | h | hexagrama |
d | diamante |
Se pueden también especificar las siguientes propiedades entre comillas simples y a continuación, sus valores:
- linewidth, especifica la anchura de línea su valor por defecto es 0.5
- markersize, especifica el tamaño del símbolo que marca los puntos
- markeredgecolor, especifica el color de borde del símbolo que marca los puntos
- markerfacecolor, especifica el color de relleno del símbolo que marca los puntos
Ejemplos de plot:
- plot(x,y), una línea azul sólida concecta los puntos (xi, yi)
- plot(x,y,'r'), una línea roja sólida conecta los puntos (xi, yi)
- plot(x, y,':g'), una línea de puntos de color verde conecta los puntos (xi, yi)
- plot(x,y,'--ro','linewidth',2,'markersize',8), ejemplo más abajo
Vectores de datos
En un experimento de carga de un condensador se ha medido la diferencia de potencial Ventre las placas del condensador en función del tiempo t, desde que se conecta la batería.
t (s) | 0 | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 |
---|---|---|---|---|---|---|---|---|---|
V (V) | 0.0 | 0.73 | 1.10 | 1.29 | 1.40 | 1.46 | 1.50 | 1.52 | 1.53 |
t=[0 10 20 30 40 50 60 70 80]; V=[0 0.73 1.10 1.29 1.40 1.46 1.50 1.52 1.53]; plot(t,V,'--ro','linewidth',1,'markersize',4,'markeredgecolor' ,'b','markerfacecolor','b') title('Carga de un condensador') xlabel('t(s)') ylabel('d.d.p (V)')
En un experimento de descarga de un condensador se ha medido la diferencia de potencial Ventre las placas del condensador en función del tiempo t.
t (s) | 10 | 20 | 30 | 40 | 50 | 60 | 70 |
---|---|---|---|---|---|---|---|
V (V) | 0.82 | 0.45 | 0.26 | 0.15 | 0.08 | 0.05 | 0.03 |
Crear una tabla de datos y un gráfico, similar al de la figura anterior.
Gráfica de una función
Vamos a obtener una tabla de datos de la función coseno, utilizando como argumento grados, cosd(x) y representarla en el intervalo de 0 a 360°, tomando un intervalo de 10°
x=0:10:360; y=cosd(x); plot(x,y) grid on %rejilla title('y=cos(x)') xlabel('x') ylabel('y')
Función definida en forma paramétrica
Representaremos las denominadas figuras de Lissajous, que se observan en la pantalla de un osciloscopio, cuando se introducen señales senoidales de la misma o de distinta frecuencia por las entradas X e Y.
x=Asin(ωxt)
y=Asin(ωyt+δ)
y=Asin(ωyt+δ)
wx=input('Frecuencia angular X: '); wy=input('Frecuencia angular Y: '); delta=input('Desfase (grados): '); t=0:360; x=sind(wx*t); y=sind(wy*t+delta); plot(x,y,'r'); text(0,0.2,'\omega_x/\omega_y=2/1') xlabel('x'); ylabel('y') title('Figuras de Lissajous')
Introducimos los valores de las frecuencias angulares ωx,ωy y del desfase δ
Frecuencia angular X: 2 Frecuencia angular Y: 1 Desfase (grados): 90
El comando text permite escribir un mensaje (caracteres entre comillas simples) en las coordendas x e y especificadas. En este caso, el mensaje consiste en el cociente de frecuencias angulares ωx/ωy.
Para escribir una letra griega se antepone el carácter \. Por ejemplo, α es \alpha, ω es \omega, etc. Para poner un subíndice se antepone el caracter _. Por ejemplo para que aprezca x1 se escribe x_1
Varias gráficas en la misma ventana
La ecuación de una oscilación amortiguada es
x=Bexp(-γ·t)·sin(ωt+δ)
donde B y δ se determinan a partir de las condiciones iniciales
Sea la oscilación amortiguada
x=5.0·exp(-7·t)·sin(100·t+1.5)
Queremos representar a la vez,
- El desplazamiento x en función del tiempo t
- La amplitud A=5.0·exp(-7·t), en función del tiempo t
Ulizamos el comando hold on para representar varias gráficas en la misma ventana.
t=linspace(0,0.7,100); A=5*exp(-7*t); x=A.*sin(100*t+1.5); hold on plot(t,x,'r') plot(t,A,'b') plot(t,-A,'b') hold off grid on legend('desplazamiento','amplitud') title('Oscilaciones amortiguadas') xlabel('t') ylabel('x')
Una forma alternativa utilizando el comando plot
t=linspace(0,0.7,100); A=5*exp(-7*t); x=A.*sin(100*t+1.5); % (t,x) en rojo 'r', (t,A) en azul 'b', (t,-A) sigue en azul plot(t,x,'r',t,A,'b',t,-A) legend('desplazamiento','amplitud') title('Oscilaciones amortiguadas') xlabel('t') ylabel('x')
O bien, guardando los datos de la oscilación amortiguada x y de la amplitud A (positiva y negativa) en un vector z.
t=linspace(0,0.7,100); A=5*exp(-7*t); z=[A.*sin(100*t+1.5);A;-A]; plot(t,z) legend('desplazamiento','amplitud') title('Oscilaciones amortiguadas') xlabel('t') ylabel('x')
De forma equivalente
t=linspace(0,0.7,100); A=5*exp(-7*t); z(1,:)=A.*sin(100*t+1.5); z(2,:)=A; z(3,:)=-A; plot(t,z) legend('desplazamiento','amplitud') title('Oscilaciones amortiguadas') xlabel('t') ylabel('x')
Otra forma, utilizando el comando line
t=linspace(0,0.7,100); A=5*exp(-7*t); x=A.*sin(100*t+1.5); plot(t,x,'r') line(t,A,'color','b') line(t,-A) legend('desplazamiento','amplitud') title('Oscilaciones amortiguadas') xlabel('t') ylabel('x')
Los dos primeros parámetros del comando line son los vectores x e y de datos. Los siguientes son propiedad entre comillas simples, seguido del valor de la propiedad, por ejemplo:
line(x,y,'linestyle','--','color','r','marker','o')
La diferencia principal entre plot y line, es que plot abre una ventana gráfica cada vez que es ejecutado, mientas que line añade gráficas a la ventana abierta previamente con plot, como en el script anterior
Decorando las gráficas
Ya hemos visto el efecto de xlabel, ylabel, title y legend en el ejemplo anterior para poner un título a la gráfica (title), identificar el eje X (xlabel) el eje Y (ylabel) y cada una de las gráficas en la misma ventana (legend)
legend
El comando legend es más complejo que los otros comandos y admite la forma siguiente:
legend('grafica1','grafica2')
El orden en el que se ponen las etiquetas corresponde al que se crean las gráficas. En el ejemplo anterior, primero se crea la gráfica de la posición (t,x) y después las dos gráficas de la amplitud (t,A)
legend('desplazamiento','amplitud','location','northwest')
En la figura se muestra algunos de los posibles valores del parámetro location y la ubicación de las etiquetas. Otro posibles valores son: Best MATLAB determina la mejor ubicación de las etiquetas para que interfiera lo mínimo con las gráficas. También se pueden poner fuera de las gráficas, con los valores NorthOutside, SouthOutside, NorthEastOutside...BestOutside
axis
Cuando se ejecuta el comando plot(x,y) MATLAB crea un eje X y un eje Y cuyos límites se deducen a partir de los valores máximo y mínimo de cada uno de los vectores x e y.
El comando axis permite cambiar el rango y la apariencia de los ejes
- axis([xmin,xmax,ymin,ymax]), establece nuevos límites a los ejes X e Y
- axis equal, establece la misma escala para ambos ejes
- axis square, región cuadrada
Probamos el aspecto de una elipse de semieje mayor 2 y semieje menor 1 según los ejes
>> t=0:pi/40:2*pi; >> plot(2*sin(t),cos(t)) >> xlabel('2·sin(t)') >> ylabel('cos(t)') >> axis equal >> axis square
Como apreciamos axis equal preserva las misma unidad en el eje X y en el eje Y, lo que es importante para representar figuras como una elipse sin distorsión
Autoescalado
En la figura de la izquierda (más abajo) no hemos utilizado el comando axis, para poner límites a los ejes, MATLAB los establece a partir de los valores máximo y mínimo de X y de Y. Sin embargo, en la figura de la derecha hemos establecido límites a los ejes: ymin=0.5 e ymax=1.5, el límite xmax=6, pero no hemos establecido un xmin concreto. Poniendo xmin=-Inf (menos infinito) dejamos a MATLAB que escale la figura. El efecto lo vemos comparando ambas figuras.
g=0.25; t=linspace(0,15,100); w=sqrt(1-g^2); x=1-exp(-g*t).*(g*sin(w*t)/w+cos(w*t)); plot(t,x,'r') axis([-Inf,6,0.5,1.5]) title('Escalón') xlabel('\omega_0t') ylabel('x(t)') grid on
xlim, ylim
Establece los límites en el eje horizontal X y en el vertical Y. Por ejemplo, xlim([0 12]) indica el valor mínimo y máximo de la abscisa que se va a representar en la ventana gráfica.
grid
grid on, añade una rejilla a la gráfica como en la primera figura
grid off, (por defecto) no añade la rejilla
text
Para poner un texto en la figura en la posición especificada por las coordendas x e y.
text(x,y,'mensaje')
El primer carácter del texto que se le pasa a text entre comillas simples se pone en el punto de coordendas (x,y)
El texto que se le pasa a los comandos xlabel, ylabel, title y text, puede contener caracteres de distinta fuente de texto y tamaño, letra en negrita, cursiva; subíndices y superíndices, caracteres griegos. El texto incluso se puede rotar para que aparezca vertical o en otra orientación.
Propiedad | Descripción | Valores |
---|---|---|
Rotation | Orientación del texto | Grados, 0 por defecto |
FontAngle | Normal o cursiva | normal (por defecto), italic |
FontName | La fuente de texto | La disponible por defecto |
FontSize | Tamaño de la fuente | 10, por defecto |
FontWeight | Negrita | light, normal (por defecto), bold |
Color | Color del texto | Color |
BackgroundColor | Color del fondo (área rectangular) | Color |
EdgeColor | Color del borde del área rectangular | Color, none (por defecto) |
LineWidth | Anchura del borde del área rectangular | 0.5 (por defecto) |
Por ejemplo, para cambiar la fuente de texto por defecto a otra de mayor tamaño, 18 puntos, se escribe
text(x,y,'mensaje','FontSize',18)
En el programa que dibuja las figuras de Lissajous hemos utilizado el comando text
Algunos caracteres griegos y símbolos matemáticos
Carácter | Resultado | Carácter | Resultado | Carácter | Resultado |
---|---|---|---|---|---|
\alpha | α | \beta | β | \gamma | γ |
\delta | δ | \epsilon | ε | \zeta | ζ |
\eta | η | \theta | θ | \kappa | κ |
\lambda | λ | \mu | μ | \nu | ν |
\xi | ξ | \varpi | ϖ | \pi | π |
\rho | ρ | \sigma | σ | \tau | τ |
\phi | φ | \omega | ω | \psi | ψ |
\chi | χ | \Gammma | Γ | \Delta | Δ |
\Tetha | Θ | \Lambda | Λ | \Xi | Ξ |
\Pi | Π | \Sigma | Σ | \Phi | Φ |
\Psi | Ψ | \Omega | Ω | \infty | ∞ |
\leq | ≤ | \geq | ≥ | \pm | ± |
\neq | ≠ | \approx | ≈ | \div | ÷ |
Modificador | Descripción |
---|---|
\bf | Negrita |
\it | Cursiva |
\rm | Normal |
^ | Superíndice |
_ | Subíndice |
\fontname{fontname} | Especifica el nombre de la fuente de texto |
\fontsize{fontsize} | Especifica el tamaño de la fuente de texto |
Se puede mostrar un solo carácter como subíndice o superíndice, a continuación del símbolo ^ o _. Se pueden mostrar varios caracteres como subíndices o superíndices si se ponen entre corchetes, por ejemplo y^{2n-1}, se muestra y2n-1, g_{01}(x), se muestra g01(x)
fplot
La función fplot dibuja una gráfica si se le pasa la función f en el primer parámetro y el intervalo [xmin, xmax] en el segundo
>> f=@(x) x-5*(1-exp(-x)); >> fplot(f,[0 6]); >> xlabel('x') >> ylabel('y') >> title('fplot') >> grid on
Alternativamente, fplot devuelve una tabla de valores [x, y] que pueden ser utilizadas por la función plot(x,y) para dibujar gráfica, o cualquier otra tarea que precise el programador
f=@(x) x-5*(1-exp(-x)); [x,y]=fplot(f,[0 6]); plot(x,y) grid on xlabel('x') ylabel('y') title('gráfica de una función')
Hay diferencias significativas entre plot y fplot. La primera evalúa la función para valores de xigualmente espaciados. Como vemos hay que especificar el intervalo Δx o el número de puntos, mientras que en la segunda no es necesario especificarlo. fplot evalúa internamente la función más frecuentemente en aquellas regiones en las que cambia rápidamente. En el siguiente ejemplo se dibuja la siguiente función en el intervalo [0.01 0.1]
>> x=0.01:0.001:0.1; >> y=sin(1./x); >> plot(x,y)
Tomando Δx=0.001, se obtiene una figura con baja resolución (izquierda). Sin embargo,
>> fplot('sin(1/x)',[0.01 0.1])
Obtenemos una figura con mejor resolución (derecha) sin tener que probar distintos valores de Δx o del número de puntos.
Así pues, fplot presenta ventajas frente a plot
Otra forma alternativa de obtener la gráfica de la derecha
>> fplot(@(x) sin(1./x),[0.01,0.1])
que es equivalente a
>> f=@(x) sin(1./x); >> fplot(f,[0.01,0.1])
Para mostrar varias gráficas en la misma ventana
>> fplot(@(x)[sin(x),cos(x),tan(x)], [0,2*pi,-2,2])
Entre corchetes, 0 a 2·π es el intervalo horizontal, en eje X, mientras que -2 a 2 es el intervalo vertical, en el eje Y
La curva cicloide viene definida por dos ecuaciones que dependen de un parámetro θ
x=r(θ-sinθ)
y=r(cosθ-1)
y=r(cosθ-1)
r=1; x=@(t) r*(t-sin(t)); y=@(t) r*(cos(t)-1); fplot(x,y,[0,2*pi]) axis equal grid on xlabel('x'); ylabel('y') title('Cicloide')
No hay comentarios:
Publicar un comentario