【问题标题】:matplotlib annotate basemap in data coordinatesmatplotlib 在数据坐标中注释底图
【发布时间】:2016-03-08 20:07:56
【问题描述】:

我有一个锤子投影图,我试图在图的中心添加文本(纬度 = 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' 的位置在错误的位置。有什么想法吗?

【问题讨论】:

    标签: python matplotlib matplotlib-basemap annotate


    【解决方案1】:

    您必须首先使用您的 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')
    

    在他们的own documentation 中,他们演示了text 的使用,而不是注释,因为没有箭头。

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

    【讨论】:

      【解决方案2】:

      除了上面@Suever 的回答之外,使用元组解包可以实现单行替代:

      plt.text(*m(lon, lat))
      

      我们只记得:

      • text(或annotate)使用x、y坐标
      • 从 long-lat 到 x-y 的转换是使用 m(lon,lat) 进行的 (其中m 是您的底图对象)。

      【讨论】:

        猜你喜欢
        • 2015-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多