Python Matplotlib映射和子图,每个数据点具有不同的文本
我正在绘制一些数据,伦敦各地的气象站,并希望用气象站的名称标记每个数据点(绿点),例如,Bow,Westminster。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:“点”对象不可编辑 以下是当
地图是从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-这是非常有用的解释