geoviews 选择小部件以在 geopandas 数据框中按列着色

问题描述 投票:0回答:1

我有一个地理视图地图,显示我的 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

Output of the working 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()
的输出很长,所以我没有发布它,但如果有帮助的话我很乐意添加。

选择小部件似乎已正确创建,但我无法将其连接到绘图(上面的错误)。

column selection widget

谢谢!

panel geopandas geoviews
1个回答
0
投票

您可以将列(

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):

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.