Python Matplotlib映射和子图,每个数据点具有不同的文本

Python Matplotlib映射和子图,每个数据点具有不同的文本,python,matplotlib,gis,geopandas,Python,Matplotlib,Gis,Geopandas,我正在绘制一些数据,伦敦各地的气象站,并希望用气象站的名称标记每个数据点(绿点),例如,Bow,Westminster。 地图是从geometry列中的Geopandas数据帧创建的。使用此帖子:https://stackoverflow.com/questions/14432557/matplotlib-scatter-plot-with-different-text-at-each-data-point 我试图对文本进行注释,但出现以下错误: TypeError:“点”对象不可编辑 以下是当

我正在绘制一些数据,伦敦各地的气象站,并希望用气象站的名称标记每个数据点(绿点),例如,Bow,Westminster。
地图是从geometry列中的Geopandas数据帧创建的。使用此帖子:
https://stackoverflow.com/questions/14432557/matplotlib-scatter-plot-with-different-text-at-each-data-point
我试图对文本进行注释,但出现以下错误:
TypeError:“点”对象不可编辑

以下是当前的地图:

代码如下:

f, ax = plt.subplots(1, figsize=(12, 12))
ax.set_title('Plot of London Grid for Learning weather stations with London boroughs and locations of Urban Mind datapoints', fontsize = 15)

boroughs.plot(alpha=1,edgecolor='w', facecolor='gray', linewidth=0.1, ax=ax)
london_umdata_geo.plot(ax=ax, marker="o",color="red",markersize=10.0,alpha=1.0, legend=True) #1,015 UM datapoints in London
stations_geo.plot(ax=ax, marker="X",color='green',markersize=20.0,alpha=1.0,legend=True)


n = stations_geo['Station Name'].tolist()
for i, txt in enumerate(n):
    ax.annotate(txt, xy = stations_geo.loc[i,'geometry'])

plt.show()
测站为绿色点,其他数据点(不会标记)为红色

stations\u geo
是一个GeoPandas数据框,其中包含一个
几何体
列,使用matplotlib从中绘制点

我正在为annotate方法使用一个循环,据说是通过geometry列中的点循环,并使用这些点作为注释的坐标,但matplotlib似乎不喜欢点对象(它们是形状优美的点)。但是,这些点首先被直接用于创建绿点,因此我不确定哪里出了问题


感谢您的帮助,谢谢

您自己已经发现了问题(“matplotlib似乎不喜欢点对象(它们是形状优美的点)”

因此,当遇到这样的问题时,您可以使用以下文档

  • 查看关于您可以为
    annotate
    xy
    参数提供的内容

    xy
    :iterable
    指定要注释的(x,y)点的长度2序列

  • 看看你的东西。如有疑问,请使用
    打印(键入(stations_geo.loc[i,'geometry'))
    。它将显示类似于
    shapely.geometry.Point
    的内容。看

  • 确定将一个转换为另一个的方法。在这种情况下,你会发现

    通过
    coords
    x
    y
    z
    属性访问坐标值

  • 打印
    stations\u geo.loc[i,'geometry']。coords
    ,它将是(单个)元组的列表。 因此,为了将单个shapely
    转换为python元组,您可以使用其
    .coords
    属性并从该列表中获取第一个(也是唯一的)元素

    xy = stations_geo.loc[i,'geometry'].coords[0]
    

  • 有没有可能使其可复制()?您好,不太清楚如何向您发送站点数据,这将使其如此。。。stations_geo是一个GeoPandas数据框,有4列:Station_名称、纬度(浮点)、经度(浮点)和几何体,这是BNG坐标中的一个形状良好的点。e、 g.站点名称经纬度几何0贝灵汉51.436-0.009点(538488.73396071 172657.9218037352)1贝尔蒙特51.346-0.203点(525250.3766155766 162301.1070065825)2弓51.528-0.028点(536892.6139878684 182852.743870542)3布伦特51.552-0.231点(522747.205360602.185161.702351622)对不起,我一直无法解决如何在StackOverflow中很好地格式化数据。桌子似乎很难。您不需要担心生成红点的数据,因为我不需要对这些数据进行注释。我想这个问题与实际的电台无关,所以应该可以很容易地在问题的一小段中重现。@ImportanceOfBeingErnest,是的,请参见上面。希望这有帮助。BNG=英国国家电网,而站点的纬度、经度点为UTC坐标Hanks@ImportanceOfBeingEarnest-这是非常有用的解释