matplotlib在数据坐标中注释底图

时间:2016-03-08 20:07:57

标签: python matplotlib matplotlib-basemap annotate

我有一个锤子投影图,我试图在图的中心添加文本(纬度= 0,经度= 0)。出于某种原因,字符串“0”绘制在图的左下角。

我有以下代码。

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


#data points
ra = [25,20,21]
dec = [25,20,21]

fig = plt.figure()
ax = fig.add_axes([0.1,0.1,0.8,0.8])

# Get the hammer projection map
m = Basemap(projection='hammer',lon_0 = 0, rsphere = 1.0)
m.drawparallels(np.arange(-90.,90.,30.),labels=[1,0,0,0]) # draw parallels
m.drawmeridians(np.arange(-180.,180.,60.)) # draw meridians

m.plot(ra,dec,marker='o',linestyle='None',markersize=1,latlon=True)
ax.annotate('0', xy=(0, 0), xycoords='data',xytext = (0,0),textcoords='data')

plt.show()

我也附上了这个图,很明显char'0'的位置在错误的位置。有什么想法吗?

enter image description here

1 个答案:

答案 0 :(得分:3)

您必须先使用Basemap实例将纬度/经度坐标转换为等效的x,y坐标。 matplotlib不会自动为您执行此操作,因为它对纬度和经度一无所知。

# Convert from latitude/longitude to x,y
x, y = m(0,0)
ax.annotate('0', xy=(x, y), xycoords='data', xytext=(x, y), textcoords='data')

enter image description here

在他们的own documentation内,由于没有箭头,他们会演示使用text而不是注释。

x, y = m(0,0)
plt.text(x, y, '0')