You are on page 1of 66

DIA 3: GRAFICOS

BIDIMENSIONALES Y
TRIDIMENSIONAL,
INTERFAZ GRAFICO EN
MATLAB. EJERCICIOS

Grficos Bidimensionales
El comando bsico para la representacin de grficos 2D es el comando plot.
Su sintaxis es:
plot(x,y): dibuja el conjunto de puntos (x,y) donde las abscisas de los puntos
se encuentran en el vector x y las ordenadas en el y.
Para representar una funcin f(x) es necesario conocer los valores de puntos
de la forma (x,f(x)). Para hacerlo se tiene que:
- Definir un vector x con el rango de variacin donde se desea pintar la
funcin. Para ello puede ser muy til el comando linspace(xmin,xmax,n).
Crear el vector y evaluando f en x. Por ejemplo:

Funcin que sirve para


realizar el
espaciamiento del
vector

>> x=linspace(0,10,100);

>> y=sin(x);

>> plot(x,y)

Tambin es posible dibujar una funcin con el comando fplot


cuya sintaxis es la siguiente: fplot(f(x),[xmin,xmax]). As,
este comando admite como argumento un nombre de
funcin o de un fichero .m en el que est definida la funcin
a representar. Por ejemplo:

>> fplot(sin(x)',[-3*pi,3*pi,-1,1])

Nota: si no se cierra la ventana de dibujo generada al


evaluar un comando como los anteriores, si se vuelve a
ejecutar uno de ellos, se dibuja sobre dicha ventana
perdindose el primer dibujo.
Tambin podemos dibujar varias funciones a la vez:
plot(x,y,x,z) donde x el vector de las abscisas, comn para
las dos representaciones, y es el de las ordenadas de la
primera representacin y z las de la segunda.
fplot([f1(x),f2(x),...],[xmin,xmax]) donde f1, f2, son
las funciones a representar en el intervalo de variacin
marcado por xmin y xmax.
-

Con los comandos hold on, hold off.


Todos los grficos que se ordene dibujar entre los comandos
hold on y hold off se representan en la misma figura.
>> hold on
>> x=[-3*pi:1:3*pi];
>> plot(x,sin(x))
>> plot(x,tan(x),'r')
>> hold off

El comando subplot. Una ventana grfica se puede dividir en m


particiones horizontales y n verticales para representar mxn
figuras. Cada una de las particiones tendr sus ejes aunque las
propiedades sern comunes a todas ellas. La sintaxis es:
subplot(m,n,i), donde m y n son el nmero de subdivisiones e i la
subdivisin activa.
>> x=0:0.1:2*pi;

>> y=sin(x);z=cos(x);t=exp(-x);v=x.^2;
>> subplot(2,2,1), plot(x,y)
>> subplot(2,2,2), plot(x,z)
>> subplot(2,2,3), plot(x,t)
>> subplot(2,2,4), plot(x,v)

Opciones de dibujo
Hemos visto que el comando plot(x,y) dibuja los grficos con
unas caractersticas predefinidas en el programa, es posible
alterarlas a partir de plot(x,y,s) donde s se compone de dos
dgitos entre comillas. Uno fija el color de la lnea y otro el
carcter a usar en el grfico.

plot(x,y,'-*g')
dibuja los puntos unidos con una lnea
continua, marcando los puntos con *, y en
verde. Otros tipos de marcadores son: . * x
o + (marcan los puntos en el grfico).

Matlab cuenta con otros tipos de lnea para nuestras grficas:

- (lnea continua)
- - (lnea formada por trazos discontinuos)
-. (lnea formada por puntos y trazos)
: (lnea formada por puntos)
Los colores vienen dados por: y: amarillo, g: verde, m: magenta, b: azul,
c:can, w: blanco, r: rojo, k: negro.
Se puede modificar el grosor de lnea incluyendo la cadena: Linewidth,

nmero_indicativo_del_grosor. Por ejemplo: plot(x,y,'linewidth',2)

En general, podemos obtener una excelente descripcin del comando plot y


otros relacionados con el mediante la ejecucin de help plot:
>> Help plot

Ttulos y etiquetas
Matlab permite manejar correctamente anotaciones sobre los grficos y los
ejes mediante la colocacin adecuada de ttulos y etiquetas, rejillas o
leyendas. Los comandos ms usados son:
title (texto): aade el texto entre comillas como ttulo del grfico.
xlabel(texto): aade el texto entre comillas como texto al lado del eje x.
ylabel(texto): aade el texto entre comillas como texto al lado del eje y.

legend(texto): sita la leyenda especificada en el texto.


grid: crea rejillas en los ejes
gtext(texto): permite situar el texto especificado en el punto que
sealemos con el ratn dentro de la ventana de trabajo.

Control de ejes
En el control de los ejers Matlab tiene opciones por defecto, pero muchas ocasiones es
interesante alterarlas. Ya hemos visto que la variacin en el eje x se elige al fijar las
coordenadas x de los puntos. Por defecto el programa ajusta la escala de cada uno de
los ejes de modo que vare entre un mximo y el mnimo valor a representar (es el modo auto).

Para definirlos se utiliza el comando axis cuya sintaxis es: axis ([xmin,xmax,ymin,ymax]).
axis(auto) devuelve la escala al valor por defecto.
Cabe destatar que: axis off elimina los ejes del dibujo y axis on los incorpora.

La ventana grfica de Matlab.


La mayora de las opciones de cambio en una grfica presentadas con anterioridad, pueden realizarse
desde la pantalla de dibujo. Posibilidades que se han mejorado en las versiones 6 del programa.
Resulta muy til inspeccionar cada uno de los mens de esta ventana ejecutar las opciones
directamente en ella. As, por ejemplo, el men insert permite directamente insertar en la figura
etiquetas en los ejes, leyendas o ttulo entre otras.

En el men edit aparecen entre otros los comandos Figure Properties, axes
Properties y Current Object Properties, con ellos se abre paso a los
editores correspondientes donde se nos da la posibilidad de cambiar las
opciones de dibujo.

El editor de ejes
Las pestaas x,y,z nos permiten actuar sobre cada uno de los ejes, poniendo etiquetas (Label),
cambiando el color (Color), cambiando los lmites (Limit),...

x=[0:0.001:2*pi];
plot(x,cos(3*x), x, sin(3*x));

xlabel('x');
legend('cos(3x)','sin(3x)')
ylabel('Amplitud')
title('plot bidimensional')
axis([0 2*pi -1.1 1.1])

Grafico 2
x=[0:0.001:2*pi];
plot(x,cos(3*x), x, sin(3*x));
xlabel('x');
legend('cos(3x)','sin(3x)')
ylabel('Amplitud')
title('plot bidimensional')
axis([0 2*pi -1.1 1.1])
set(gca, 'ytick',[-1 -0.5 0 0.5 1])
set(gca, 'xtick',[0 pi/2 pi 3*pi/2 2*pi])
set(gca, 'XTickLabel',{'0'; 'pi/2'; 'pi'; '3*pi/2'; '2*pi'})

Grfico 3
x1=[0:0.001:2*pi];
x2=[0:pi/30:2*pi];
plot(x1, cos(3*1),'r:', x2, cos(3*x2),'bo')
grid
handle_arrow=annotation('arrow', 0.13+[1/7 2/14], [4/10
5/10],'Color',[1 0 0])
text(0.6,0.1, 'cero de la funcion')
set(handle_arrow, 'HeadStyle', 'plain')

Grafico 4
x=[0:0.001:2*pi];
y=[cos(x); cos(2*x); cos(3*x);
cos(4*x)];
plot(x,y)

Grafico 5
x= logspace(-1,2);
loglog(x,exp(x),'-s')
grid

Grafico 6

income= [3,2 4,1 5.0 5.6];


outgo= [2.5 4.0 3.35 4.9];
subplot(2, 1, 1); plot(income)
subplot(2,1,2) ; stem(outgo)

Grafico 7
x1=[0:0.001:2*pi];
x2= [0:pi/30:2*pi];
plot(x1, cos(x1));
hold
%current plot held
plot(x2,cos(x2), 'ro');

Grafico 8
x1=[0:0.001:2*pi];
plot(x1,sin(x1))
figure
plot(x1, cos(x1))
figure(1)
gtext('esto es seno(x)')
[x,y]=ginput

Grafico 9
x=-2.9:0.2:2.9;
bar(x,exp(-x.*x),'r')

Grafico 10

Z=peaks;
[C h] = contour(Z,10);
clabel(C,h)
title({'Contour Labeled
Using','clavel(C,h)'})

Grafico 11
Y= round(rand(5,3)*10);
subplot(2,2,1)
bar(Y,'group')
title 'Group'
subplot(2,2,2)
bar(Y,'stack')
title 'stack'
subplot(2,2,3)
barh(Y,'stack')
title 'stack'
subplot(2,2,4)
bar(Y,1.5)
title 'with = 1.5'

Grfico 12

Y=randn(3,5);
h=bar(Y);
set(get(h(1),
'baseline'),'LineWidth',2,'LineStyle',':')
colormap summer%Change the color scheme

Grficos tridimensionales
La representacin de funciones 3D ( es decir, funciones f: R2 R) se puede realizar
en MATLAB de forma directa, utilizando alguna de las utilidades predefinidas en
dicho lenguaje. Para ello, en cualquier caso, es necesario que, previamente, se
definan todos los puntos (x, y) sobre los cuales va a tomar valores la funcin f.
Esta tarea se realiza discretizando, en primer lugar, los ejes x e y que definen el
plano y, a partir de esta discretizacin inicial, se calculan todos los pares de
puntos (x, y).
En Matlab existen muchas funciones para representar las grficas en 3D.

Grficos tridimensionales
figura 13
[X,Y,Z]= peaks;
contour3(X,Y,Z,20)
h=findobj('Type','patch');
set(h,'LineWidth',2)
title('Twenty Contours of the peaks
Function')

Grafico 14

for k= 1:16
plot(fft(eye(k+16)))
axis equal
M(k) = getframe;
end
movie(M,30)
movie2avi(M,'movie.avi');

figura15

RGB=imread('imagen1.jpg');
figure('position',[100 100 size(RGB,2)
size(RGB,1)]);
image(RGB); set(gca,'Position',[0 0 1 1])

Figura 16

t=0:pi/50:10*pi;
plot3(sin(t), cos(t), t)
axis square; grid on

Figura 17

[X,Y]=meshgrid([-2:0.1:2]);
Z=X.*exp(-X.^2-Y.^2);
plot3(X,Y,Z)
grid on

Grafico 18
[X, Y]= meshgrid(-8:.5:8);
R= sqrt(X.^2+Y.^2) + eps;
Z= sin(R)./R;
mesh(X,Y,Z)

Interfaces
Una GUI debe ser consistente y fcilmente entendida por el
usuario

Proporciona al usuario con la habilidad de usar un


programa sin tener que preocuparse sobre los comandos
para ejecutar un programa.

- Componentes
Grficos

pushbuttons, edit boxes, sliders, labels, menus, etc


Estticos
Frames, text strings,
Ambos se crean usando la funcin uicontrol
Figuras los componentes estn contenidos en figuras
Callbacks son funciones que realizan las acciones
requeridas cuando un componente se activa.

MATLAB dispone de una utilidad para el desarrollo interactivo de


interfaces de usuario (GUI) llamado GUIDE
Para ello se escribe el comando guide o se pulsa sobre su icono
en el entorno de desarrollo Matlab.

Aparece una ventana para seleccionar plantillas o abrir GUIs


existentes.

Aparece una ventana para seleccionar plantillas o abrir un nuevo


fichero.

Cambio de preferencias para mostrar nombres

El editor permite construir interfaces arrastrando y soltando


componentes en el rea de diseo de la GUI.
Todas las GUIs creadas con guide empiezan con una funcin
inicial (callback) que se invoca cuando se invoca la interfaz.
La operacin automtica de guardado (save) genera un fichero
.m y un fichero .fig.
El fichero .fig contiene el diseo del GUI en binario y
el fichero .m contiene el cdigo que controla el GUI.

Componentes disponibles en la paleta


CONTROL

DESCRIPCIN

Push Button

Genera una accin

Slider

Representa un rango de valores

Radio Button

Representa una opcin

Check Box

Indica el estado de una opcin

Edit Text

Para editar texto

Static text

Muestra un string de texto

Pop-up Menu

Provee una lista de opciones

Listbox

Lista deslizable

Toggle Button

Genera una accin on, off

Axes

Para graficar

Panel

Visualiza grupo de controles

Button Grup

Es un panel exclusivo para radio buttons y


toggle buttons

ActiveX Control

Despliega controles ActiveX en Gui

Una aplicacin GUIDE consta de dos archivos: .m y .fig. El archivo


.m es el que contiene el cdigo con las correspondencias de los
botones de control de la interfaz y el archivo .fig contiene los
elementos grficos.
Cada vez que se adicione un nuevo elemento en la interfaz
grfica, se genera automticamente cdigo en el archivo .m. Para
ejecutar una Interfaz Grfica, si la hemos etiquetado con el
nombre curso.fig, simplemente ejecutamos en la ventana de
comandos >> curso. O haciendo click derecho en el m-file y
seleccionando la opcin RUN.

Ejemplo de una GUI


A manera de ejemplo, desarrollaremos un GUI Por lo que
procederemos a poner los siguientes componentes:
4 etiquetas

3 cuadros de texto
5 botones

SENTENCIAS GET Y SET


La asignacin u obtencin de valores de los componentes se realiza mediante las
sentencias get y set. Por ejemplo:
celsius1=eval(get(handles.celsius,'string'));
%Para convertir celsius a kelvin
kelvin1=celsius1 + 273.15;
Notar que siempre se obtienen los datos a travs de los identificadores handles.
Para colocar el valor de la variable kelvin1 al statictext,(Tag kelvin) escribimos:
set(handles.kelvin,'string',kelvin1);

Para empezar a trabajar con


algn componente basta con
dar click derecho e irnos a
callback el cual mostrar
donde situar el cdigo para la
accin del botn

Para trabajar con un componente


solo es necesario arrastrarlo en
donde se quiera posicionar

Para cambiar o poner


nombre al componente
se da click derecho y nos
mostrar las propiedades
del componente

function BotonCelsius_Callback(hObject, eventdata, handles)

% hObject

handle to BotonCelsius (see GCBO)

% eventdata
MATLAB

reserved - to be defined in a future version of

% handles
GUIDATA)

structure with handles and user data (see

% Adicionamos
% Para leer el dato colocado en celsius
celsius1=eval(get(handles.celsius,'string'));
%Para convertir celsius a kelvin y fehrenheit
kelvin1=celsius1 + 273.15;
fahrenheit1=1.8*celsius1 + 32;
%Para escribir datos en los Edit Text
set(handles.kelvin,'string',kelvin1);
set(handles.fahrenheit,'string',fahrenheit1);

Insertar este cdigo en el


botonKevin

kelvin1=eval(get(handles.kelvin,'string'));
%Para convertir kelvin a celsius y fehrenheit
celsius1=kelvin1 - 273.15;

fahrenheit1=(kelvin1-273.15)*1.8 + 32;
%Para escribir datos en los Edit Text
set(handles.celsius,'string',celsius1);
set(handles.fahrenheit,'string',fahrenheit1);

Aqu tenemos el cdigo para el


botonFahrenheit
% Adicionamos
% Para leer el dato colocado en fahrenheit
fahrenheit1=eval(get(handles.fahrenheit,'string'));

%Para convertir fahrenheit a celsius y kelvin


celsius1=(fahrenheit1-32)*5/9;
kelvin1=(fahrenheit1-32)*5/9 + 273.15;
%Para escribir datos en los Edit Text
set(handles.celsius,'string',celsius1);
set(handles.kelvin,'string',kelvin1);

Cdigo para el botonSalir

function BotonSalir_Callback(hObject, eventdata, handles)


% hObject

handle to BotonSalir (see GCBO)

% eventdata
MATLAB

reserved - to be defined in a future version of

% handles
GUIDATA)

structure with handles and user data (see

close(gcbf)

function botonLimpiar_Callback(hObject, eventdata, handles)


% hObject

handle to botonLimpiar (see GCBO)

% eventdata
MATLAB

reserved - to be defined in a future version of

% handles
GUIDATA)

structure with handles and user data (see

limpia=' ';

set(handles.celsius,'string',limpia);
set(handles.kelvin,'string',limpia);
set(handles.fahrenheit,'string',limpia);

Ejemplo 2
Para este ejemplo realizaremos una serie de grficos, utilizando figuras y un
men desplegable.
Por lo cual necesitaremos los siguientes componentes:

Popmenu

Boton

axes

En el inspector de propiedades,
poner en String del pop-up menu
los siguiente

function figurapop_OpeningFcn(hObject, eventdata, handles,


varargin)

% This function has no output args, see OutputFcn.

% hObject

handle to figure

if strcmp(get(hObject,'Visible'),'off')

plot(rand(5));

end

Vamos al callback del botn update

function pushbutton1_Callback(hObject, eventdata, handles)

% hObject

handle to pushbutton1 (see GCBO)

% eventdata

reserved - to be defined in a future version of MATLAB

% handles

structure with handles and user data (see GUIDATA)

axes(handles.axes1);

%cla;

popup_sel_index = get(handles.popupmenu1, 'Value');

switch popup_sel_index

case 1

plot(rand(5));

case 2

plot(sin(1:0.01:25.99));

case 3

bar(1:.5:10);

case 4

plot(membrane);

case 5

surf(peaks);

end

Ahora vamos a insertar un men a nuestra interfaz:

Daremos click en Men Editor, nos mostar el


siguiente cuadro, donde insertaremos nuesto
men desplegable

Al dar click nos aparecer


un men principal, para
despus desplegar en l,
submens

Una vez realizado el men y los submens procederemos a ingresar el cdigo.


% -------------------------------------------------------------------function File_Callback(hObject, eventdata, handles)

% hObject

handle to File (see GCBO)

% eventdata

reserved - to be defined in a future version of MATLAB

% handles

structure with handles and user data (see GUIDATA)

% -------------------------------------------------------------------function Openmenu_Callback(hObject, eventdata, handles)


% hObject

handle to Openmenu (see GCBO)

% eventdata

reserved - to be defined in a future version of MATLAB

% handles

structure with handles and user data (see GUIDATA)

file = uigetfile('*.fig');
if ~isequal(file, 0)
open(file);

end

% -------------------------------------------------------------------function imprimirmenu_Callback(hObject, eventdata, handles)


% hObject

handle to imprimirmenu (see GCBO)

% eventdata

reserved - to be defined in a future version of MATLAB

% handles

structure with handles and user data (see GUIDATA)

printdlg(handles.figure1)

% -------------------------------------------------------------------function closemenu_Callback(hObject, eventdata, handles)


% hObject

handle to closemenu (see GCBO)

% eventdata

reserved - to be defined in a future version of MATLAB

% handles

structure with handles and user data (see GUIDATA)

selection = questdlg(['Close ' get(handles.figure1,'Name') '?'],...

['Close ' get(handles.figure1,'Name') '...'],...


'Yes','No','Yes');
if strcmp(selection,'No')

return;
end
delete(handles.figure1)

Ejemplo 3
Realizaremos una serie de mensajes, que son de mucha ayuda cuando queramos
programar algn proyecto.
Para lo cual, necesitaremos los siguientes componentes:
Un panel
5 botones

Anexaremos en el callback el
siguiente cdigo..

% --- Executes on button press in pushbutton1.

function pushbutton1_Callback(hObject, eventdata, handles)

% hObject

handle to pushbutton1 (see GCBO)

% eventdata
MATLAB

reserved - to be defined in a future version of

% handles
GUIDATA)

structure with handles and user data (see

warndlg('Esto es un aviso','Curso_GUIDE');

% --- Executes on button press in pushbutton2.

function pushbutton2_Callback(hObject, eventdata, handles)

% hObject

handle to pushbutton2 (see GCBO)

% eventdata
MATLAB

reserved - to be defined in a future version of

% handles
GUIDATA)

structure with handles and user data (see

errordlg('Esto es un mensaje de error',' Curso_GUIDE ');

function pushbutton3_Callback(hObject, eventdata, handles)

% hObject

handle to pushbutton3 (see GCBO)

% eventdata
MATLAB

reserved - to be defined in a future version of

% handles
GUIDATA)

structure with handles and user data (see

helpdlg('Esto es una ayuda',' Curso_GUIDE ');


function pushbutton4_Callback(hObject, eventdata, handles)

% hObject

handle to pushbutton4 (see GCBO)

% eventdata
MATLAB

reserved - to be defined in a future version of

% handles
GUIDATA)

structure with handles and user data (see

msgbox('Esto es un cuadro de mensaje',' Curso_GUIDE ');

% --- Executes on button press in pushbutton5.


function pushbutton5_Callback(hObject,
eventdata, handles)
% hObject

handle to pushbutton5 (see GCBO)

% eventdata reserved - to be defined in a


future version of MATLAB
% handles
structure with handles and user
data (see GUIDATA)
questdlg('Esto es una pregunta',' Curso_GUIDE
');

You might also like