This is the official page of the free program bands2plot. It is a simple Perl script, and I am not a Perl expert, so don't expect much from it.
Since bands2plot is free software, you can download, use, modify and redistribute it to your heart's content, with some caveats (see license). If you would like to share your corrections/additions with me, I'd gladly hear of them by e-mail.
bands2plot takes a SIESTA .bands file, and outputs some data files, in formats suitable for Grace or gnuplot. It also has the capability of unsorting the bands. The bands SIESTA (and any other electronic structure program) outputs are sorted by energy, that is: the first band is obtained by joining the lowest points for each K-value, the second band joining the second lowest points and so forth. The problem is that this doesn't consider band crossings at all. bands2plot can account for that, and correctly (I hope) follows band crossings, as well as keep avoided crossings avoided.
The unsorting capability is explained in the following graphs (click to enlarge). Notice, for example, the behavior of the thick green line. In the sorted bands case, it is formed by following all the highest points for each K. In the unsorted case, it correctly corresponds to joining the points that belong to the same band.
The mesh of points in the E vs. K plane is joined forming E=f(K) bands. We begin from lower Ks, and proceed by assigning new points to the bands so far formed, making them grow from low K to high K. The assignment is made in such a way that the inclusion of a new point in a given band distorts as little as possible its curvature. Assuming a continuous derivative, and that the consecutive points are close enough (little distance from K=i to K=i+1), the curvature must be essentially constant from point to point. After having assigned the points in K=i+1, we move onto K=i+2.