How do I get rid of the redundant ticks on the top and right edges?

pylab.gca().get_xaxis().set_ticks_postion('bottom')

same for yaxis

 
Is there any way to stop some of my text labels from overlapping?

don't know
 
Why is there such a big gap between the plot itself and the axes ticks?

did you try  pylab.axis('tight')

Bernhard