Eu acredito que o GnuPlot pode fazer isso
Também existem módulos Perl que fazem esse tipo de coisa:
use Graph::Easy;
my $graph = Graph::Easy->new();
$graph->add_edge_once ('Bonn', 'Berlin');
print $graph->as_ascii( );
# prints:
# +------+ +--------+
# | Bonn | --> | Berlin |
# +------+ +--------+