4

I would like to plot curved/arced lines on a Basemap map. I can plot a straight line using map.plot(x,y,..), but how do I make it curved/have arrows?

In matplotlib, this can be done using annotate(..), but Basemap doesn't have this method.

Any ideas?

bmu
  • 35,119
  • 13
  • 91
  • 108
Ash
  • 745
  • 2
  • 13
  • 21
  • Ok, found one solution, i.e. simply to draw on matplotlib.pyplot instead of the map object. However, this does not allow me to do things like "wrapping around" the globe with a line – Ash Dec 17 '10 at 09:07

1 Answers1

4

This is a very old question, but I thought it might be good to answer anyway. When you said curved lines, I assumed you meant drawing a great circle. There is an example of doing exactly that in the basemap documentation, which I have modified to make a little more easy to modify yourself:

from mpl_toolkits.basemap import Basemap
import numpy as np
import matplotlib.pyplot as plt

m = Basemap(projection='cyl')

p0_ll =  -73.98, 40.78
p1_ll = 0.08, 51.53

m.drawgreatcircle(p0_ll[0], p0_ll[1], p1_ll[0], p1_ll[1], 
                  linewidth=2, color='b')
m.drawcoastlines()
m.fillcontinents()

plt.show()

enter image description here

Note that the great circle method cannot handle the crossing of the edges of the map (as mentioned in the documentation), which, although clearly documented, is a pretty major flaw IMHO.

Hope that helps somebody,

pelson
  • 21,252
  • 4
  • 92
  • 99