function grafica_dos_fdist(pa, xa, pb, xb)
%% function grafica_dos_fdist(pa, xa, pb, xb)
%% Graficar las funciones de distribucion de dos distribuciones discretas
%% pi: son las probabilidades de cada valor
%% xi: son los valores respectivos (en estricto orden ascendiente)
%%  Ricard Torres <rtorres@itam.mx>

   la = length(xa);
   lb = length(xb);
   if la ~= length(pa) || lb ~= length(pb)
      error('Valores y probabilidades deben tener la misma longitud');
   end
   tol = 1e-10; % tolerancia para comparar magnitudes
   if max( abs(sum(pa)-1), abs(sum(pb)-1) ) > tol
      error('Vectores de probabilidad deben sumar 1');
   end
   if any(xa ~= sort(unique(xa))) || any(xb ~= sort(unique(xb)))
      error('Vectores de valores deben estar en orden ascendiente estricto');
   end
   Fa = cumsum(pa);
   Fb = cumsum(pb);
   % Rango de valores que graficaremos
   vmax = max(xa(end),xb(end));
   vmin = min(xa(1),xb(1));
   vavg = ( vmax - vmin ) / max(la,lb); % distancia media entre valores
   xmin = vmin - vavg; % margen a la izquierda
   xmax = vmax + vavg; % margen a la derecha
   % generar puntos para graficar funcion tipo escalera
   [xas,Fas] = stairs(xa,Fa);
   [xbs,Fbs] = stairs(xb,Fb);
   figure; % crear nueva figura
   % marcar los puntos de la distribucion
   plot([xmin,xa(1),xa(1)],[0,0,Fa(1)],'-','Color','Blue','LineWidth',2);
   hold on;
   plot([xa(end),xmax],[1,1],'-','Color','Blue','LineWidth',2);
   ha = plot(xas,Fas,'-','Color','Blue','LineWidth',2);
   plot(xa,Fa,'o','Color','Blue','LineWidth',2);
   plot([xmin,xb(1),xb(1)],[0,0,Fb(1)],'-','Color','Red','LineWidth',2);
   plot([xb(end),xmax],[1,1],'-','Color','Red','LineWidth',2);
   hb = plot(xbs,Fbs,'-','Color','Red','LineWidth',2);
   plot(xb,Fb,'o','Color','Red','LineWidth',2);
   axis([xmin,xmax,-0.1,1.1]);
   xlabel('Valores'); 
   ylabel('Probabilidad acumulada');
   title('Funciones de distribucion');
   legend([ha,hb],{'F distrib A','F distrib B'},'Location','NorthWest');
   hold off
end

