我有一个地理视图地图,显示我的 geopandas 数据框中的点。我想使用面板创建一个选择小部件,以按其中一列为地图着色,就像我对 pandas 数据框和 hvplot 所做的那样。
示例对象
import random
import geopandas as gpd
import geoviews as gv
df = gpd.read_file(gpd.datasets.get_path('naturalearth_cities'))
# create some columns of random data
df['A'] = [random.randrange(1, 50, 1) for i in range(len(df))]
df['B'] = [random.randrange(200, 300, 1) for i in range(len(df))]
此代码片段中的代码创建了一个地图,但颜色参数是硬编码的:
poly_plot = gv.Points(df).opts(color='A', width=600, height=600, colorbar=True, clabel='A',
cmap='inferno', size=12)
gv.tile_sources.OSM * poly_plot
但是,当我尝试使用面板为颜色下拉列表添加小部件选择时,出现错误:
# create the select widget
columns = pn.widgets.Select(name='columns', options=['A', 'B'])
# create my geoviews object, specifying my select widget for color
poly_plot = gv.Points(df).opts(color=columns, width=600, height=600, colorbar=True,
clabel='A', cmap='inferno', size=12)
# plot on a basemap
gv.tile_sources.OSM * poly_plot
错误:
ValueError【调用holoviews.ipython.show_traceback()了解详情】 无法验证 Scatter(id='p2448', ...).fill_color: 需要 String、Nullable(Color)、Instance(Value)、Instance(Field)、Instance(Expr)、Struct(value=Nullable) 的元素(颜色)、transform=Instance(Transform))、Struct(field=String、transform=Instance(Transform)) 或 Struct(expr=Instance(Expression)、transform=Instance(Transform))、get Select(name='columns ',选项=['A','B'],值='A')
holoviews.ipython.show_traceback()
的输出很长,所以我没有发布它,但如果有帮助的话我很乐意添加。
选择小部件似乎已正确创建,但我无法将其连接到绘图(上面的错误)。
谢谢!
您可以将列(
A
和B
)添加为dim
并创建可调用来更新布局/地图:
import panel as pn
def update(col):
return gv.Points(
df,
).opts(
opts.Points(
width=800,
height=500,
colorbar=True,
cmap="inferno",
size=12,
color=dim(col),
)
)
csel = pn.widgets.Select(options=["A", "B"], value="A")
@pn.depends(column=csel.param.value)
def plot(col):
return gv.tile_sources.OSM * update(col)
pn.Column(csel, plot).show()
输出(localhost):