import graph;
real margin=4mm;
real unite=8mm;
transform h=scale(.7);
picture pic1;
real xmin=-3,xmax=3;
real ymin=0,ymax=9;
real f(real x) {return x^2;}
path Cf=graph(f,xmin,xmax,n=100);
draw(pic1,Cf,1bp+red);
xaxis(pic1,Label("$x$",position=EndPoint, align=NE),xmax=xmax+.4,
Ticks(h*Label(),Size=.8mm, size=.4mm),Arrow());
yaxis(pic1,Label("$y$",position=EndPoint, align=NE),ymin,ymax=ymax+.4,
Ticks(h*Label(),NoZero,Size=.8mm, size=.4mm),Arrow());
label(pic1,"\fbox{$f_1$}",(1,8));
unitsize(pic1,unite);
frame f1=pic1.fit();
add(f1);
picture pic2;
real xmin=-1.6,xmax=3.5;
real ymin=-1,ymax=4.5;
real f(real x) {return (x^3-3x^2-x+2)/3;}
path Cf=graph(f,xmin,xmax,n=100);
draw(pic2,Cf,1bp+blue);
xaxis(pic2,Label("$x$",position=EndPoint, align=NE),xmax=xmax+.4,
Ticks(h*Label(),NoZero,Size=.8mm, size=.4mm));
yaxis(pic2,Label("$y$",position=EndPoint, align=NE),
Ticks(h*Label(),NoZero,Size=.8mm, size=.4mm));
label(pic2,"\fbox{$f_2$}",(2,3));
unitsize(pic2,unite);
frame f2=pic2.fit();
f2=shift(max(f1).x-min(f2).x+margin)*f2;
add(f2);
picture pic3;
real xmin=-4.5,xmax=1.5;
real ymin=-.5,ymax=4.5;
real f(real x) {return exp(x);}
path Cf=graph(f,xmin,xmax,n=100);
draw(pic3,Cf,1bp+green);
xaxis(pic3,Label("$x$",position=EndPoint, align=NE),xmax=xmax+.4,
Ticks(h*Label(),Size=.8mm, size=.4mm));
yaxis(pic3,Label("$y$",position=EndPoint, align=NE),
Ticks(h*Label(),NoZero,Size=.8mm, size=.4mm));
label(pic3,"\fbox{$f_3$}",(2,3));
unitsize(pic3,unite);
frame f3=pic3.fit();
f3=shift(max(f2).x-min(f3).x+margin)*f3;
add(f3);