Examples of drawing scientific diagrams with Asymptote in IPython notebook

These examples are taken from the gallery on Asymptote's website. We start by installing the asymptote IPython magics remotely from the github repository.

In [1]:
# Install the IPython magic extension
%install_ext http://raw.github.com/azjps/ipython-asymptote/master/asymagic.py
Installed asymagic.py. To use it, type:
  %load_ext asymagic
In [2]:
# Load the extension
%reload_ext asymagic

Examples

In [3]:
%%asy
size(250);

real a=3;
real b=4;
real c=hypot(a,b);

transform ta=shift(c,c)*rotate(-aCos(a/c))*scale(a/c)*shift(-c);
transform tb=shift(0,c)*rotate(aCos(b/c))*scale(b/c);

picture Pythagorean(int n) {
  picture pic;
  fill(pic,scale(c)*unitsquare,1/(n+1)*green+n/(n+1)*brown);
  if(n == 0) return pic;
  picture branch=Pythagorean(--n);
  add(pic,ta*branch);
  add(pic,tb*branch);
  return pic;
}

add(Pythagorean(12));
Out[3]:

Using the -f --outformat argument, the output format of the image can be changed. By default the image is output as a png. Asymptote may require additional configurations or third party programs (ImageMagick) for additional formats.

In [4]:
%%asy -f png
import graph3;
import palette;
import contour3;
size(400);

real f(real x, real y, real z) {
  return cos(x)*sin(y)+cos(y)*sin(z)+cos(z)*sin(x);
}

surface sf=surface(contour3(f,(-2pi,-2pi,-2pi),(2pi,2pi,2pi),12));
sf.colors(palette(sf.map(abs),Gradient(red,yellow)));

currentlight=nolight;

draw(sf,render(merge=true));

Out[4]:

A local asymptote code file can also be compiled and displayed if its specified as the argument to an asy file:

In [5]:
!head fin.asy
// See http://asymptote.sourceforge.net/gallery/fin.asy

import three;
import palette;

int N = 26;
real[] C = array(N,0); 
real[][] A = new real[N][N];
for(int i = 0; i < N; ++i)
  for(int j = 0; j < N; ++j)
In [6]:
%asy fin.asy

Out[6]:

We can also interactively append asymptote code to these files:

In [7]:
%%asy fin.asy
label("I added this new label right now!", (2.0,0,0), NE);

Out[7]:

To save the intermediate .asy code file and output image, use the -r --root argument.

In [8]:
%%asy --root cube
import three;
currentprojection=orthographic(5,4,2, center=true);

size(5cm);
size3(3cm,5cm,8cm);

draw(unitbox);
dot(unitbox, red);

label("$O$", (0,0,0), NW);
label("(1,0,0)", (1,0,0), S);
label("(0,1,0)", (0,1,0), E);
label("(0,0,1)", (0,0,1), Z);

Out[8]:
In [9]:
!head cube.asy
import three;
currentprojection=orthographic(5,4,2, center=true);

size(5cm);
size3(3cm,5cm,8cm);

draw(unitbox);
dot(unitbox, red);

label("$O$", (0,0,0), NW);