Python 如何在地理点打印上覆盖文字标签?
我正在尝试将标签添加到在平铺地图上显示点的hvplot 我的GeoDataFramePython 如何在地理点打印上覆盖文字标签?,python,geopandas,hvplot,Python,Geopandas,Hvplot,我正在尝试将标签添加到在平铺地图上显示点的hvplot 我的GeoDataFramegdf如下所示: id geometry 8911 POINT (5.79557 53.20121) 8912 POINT (5.76973 53.18031) 8913 POINT (5.78159 53.20088) 8914 POINT (5.75442 53.20394) 8915 POINT (5.76594 53.21173) 将这些点添加到地图很容易
gdf
如下所示:
id geometry
8911 POINT (5.79557 53.20121)
8912 POINT (5.76973 53.18031)
8913 POINT (5.78159 53.20088)
8914 POINT (5.75442 53.20394)
8915 POINT (5.76594 53.21173)
将这些点添加到地图很容易:
gdf.hvplot(geo=True,tiles=True)
然后,我尝试使用类似的方式绘制文本标签,但这不起作用
gdf.hvplot.labels(geo=True,tiles=True,text='id')
它给了我这个错误
Traceback (most recent call last):
File "<ipython-input-138-73570b6a686e>", line 1, in <module>
centroid_labels = dfl.hvplot.labels(geo=True, tiles=True, text='id')
File "C:\Users\user\Miniconda3\envs\otp\lib\site-packages\hvplot\plotting\core.py", line 574, in labels
return self(x, y, text=text, kind='labels', **kwds)
File "C:\Users\user\Miniconda3\envs\otp\lib\site-packages\hvplot\plotting\core.py", line 79, in __call__
return self._get_converter(x, y, kind, **kwds)(kind, x, y)
File "C:\Users\user\Miniconda3\envs\otp\lib\site-packages\hvplot\converter.py", line 1097, in __call__
obj = method(x, y)
File "C:\Users\user\Miniconda3\envs\otp\lib\site-packages\hvplot\converter.py", line 1688, in labels
text = self.kwds.get('text', [c for c in data.columns if c not in (x, y)][0])
IndexError: list index out of range
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
质心标签=dfl.hvplot.labels(geo=True,x=dfl.geometry.x,y=dfl.geometry.y,tiles=True,text='id')
文件“C:\Users\user\Miniconda3\envs\otp\lib\site packages\hvplot\plotting\core.py”,第574行,在标签中
返回自我(x,y,text=text,kind='labels',**kwds)
文件“C:\Users\user\Miniconda3\envs\otp\lib\site packages\hvplot\plotting\core.py”,第79行,在调用中__
返回自我。获取转换器(x,y,种类,**kwds)(种类,x,y)
文件“C:\Users\user\Miniconda3\envs\otp\lib\site packages\hvplot\plotting\core.py”,第83行,在get转换器中
x=x或参数pop('x',无)
文件“C:\Users\user\Miniconda3\envs\otp\lib\site packages\pandas\core\generic.py”,第1442行,非零__
升值误差(
ValueError:序列的真值不明确。请使用a.empty、a.bool()、a.item()、a.any()或a.all()。
我可以通过将CRS转换为()来实现这一点,这可能适合您的目的,也可能不适合您的目的
作为旁注,如果能就这样的问题进行讨论,那就太好了
以下是有效的方法:
将geopandas导入为gpd
作为pd进口熊猫
导入hvplot.pandas
将地理视图作为gv导入
从geoviews将瓷砖源作为GVT导入
原始=“8911点(5.79557 53.20121)
8912点(5.76973 53.18031)
8913点(5.78159 53.20088)
8914分(5.75442 53.20394)
8915点(5.76594 53.21173)”
数据=[([0]、[2]、[1])用于[[uu.replace(“(”,“)。replace(“),”)。split()用于原始分割(“\n”)]]
df=pd.DataFrame(数据,列=[“labels”,“x”,“y”]).astype({“labels”:str})
gdf=gpd.GeoDataFrame(df,geometry=gpd.points_from_xy(df.x,df.y,crs=“EPSG:4326”))
瓷砖=gvts.CartoLight
points=gdf.hvplot(geo=True,tiles=“CartoLight”)
labels=gdf.to_crs(“EPSG:3857”).assign(x=lambda-df:df.geometry.x,y=lambda-df:df.geometry.y)。hvplot.labels(text=“labels”,x=“x”,y=“y”)
(点*标签*瓷砖).选项(高度=600,宽度=800)
我认为这应该奏效:
gdf.hvplot.labels(text=“labels”,geo=True)
这实际上只是围绕最初的问题,可能值得在github上报告这个问题
Traceback (most recent call last):
File "<ipython-input-143-0eaefd24cbe6>", line 1, in <module>
centroid_labels = dfl.hvplot.labels(geo=True, x=dfl.geometry.x, y=dfl.geometry.y, tiles=True, text='id')
File "C:\Users\user\Miniconda3\envs\otp\lib\site-packages\hvplot\plotting\core.py", line 574, in labels
return self(x, y, text=text, kind='labels', **kwds)
File "C:\Users\user\Miniconda3\envs\otp\lib\site-packages\hvplot\plotting\core.py", line 79, in __call__
return self._get_converter(x, y, kind, **kwds)(kind, x, y)
File "C:\Users\user\Miniconda3\envs\otp\lib\site-packages\hvplot\plotting\core.py", line 83, in _get_converter
x = x or params.pop('x', None)
File "C:\Users\user\Miniconda3\envs\otp\lib\site-packages\pandas\core\generic.py", line 1442, in __nonzero__
raise ValueError(
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().