digraph G { // leave some space for the head/taillabels graph [ranksep=1.5 splines=true overlap=false] // to avoid confusion, remember this: // it's spelt tail/head, but it's read start/end // put head/tail labels farther from the node edge [labeldistance=3] // not interested in node labels node [shape=circle width=0.5 label=""] { edge [dir=back samehead=ahead samearrowhead=1] a->Z [arrowtail=none taillabel=none] b->Z [arrowtail=normal taillabel=normal] c->Z [arrowtail=inv taillabel=inv] d->Z [arrowtail=dot taillabel=dot] e->Z [arrowtail=odot taillabel=odot] f->Z [arrowtail=invdot taillabel=invdot] g->Z [arrowtail=invodot taillabel=invodot] h->Z [arrowtail=open taillabel=open] i->Z [arrowtail=halfopen taillabel=halfopen arrowhead=inv headlabel=samehead] j->Z [arrowtail=empty taillabel=empty] k->Z [arrowtail=invempty taillabel=invempty] l->Z [arrowtail=diamond taillabel=diamond] m->Z [arrowtail=odiamond taillabel=odiamond] n->Z [arrowtail=box taillabel=box] o->Z [arrowtail=obox taillabel=obox] p->Z [arrowtail=tee taillabel=tee] q->Z [arrowtail=crow taillabel=crow] } { edge [sametail=atail samearrowtail=1] Z->A [arrowhead=none headlabel=none] Z->B [arrowhead=normal headlabel=normal] Z->C [arrowhead=inv headlabel=inv] Z->D [arrowhead=dot headlabel=dot] Z->E [arrowhead=odot headlabel=odot] Z->F [arrowhead=invdot headlabel=invdot] Z->G [arrowhead=invodot headlabel=invodot] Z->H [arrowhead=open headlabel=open] Z->I [arrowhead=halfopen headlabel=halfopen arrowtail=inv taillabel=sametail] Z->J [arrowhead=empty headlabel=empty] Z->K [arrowhead=invempty headlabel=invempty] Z->L [arrowhead=diamond headlabel=diamond] Z->M [arrowhead=odiamond headlabel=odiamond] Z->N [arrowhead=box headlabel=box] Z->O [arrowhead=obox headlabel=obox] Z->P [arrowhead=tee headlabel=tee] Z->Q [arrowhead=crow headlabel=crow] } }