【问题标题】:Streamlit returns error if get_elevation added to ColumnLayer如果将 get_elevation 添加到 ColumnLayer,Streamlit 将返回错误
【发布时间】:2023-03-14 19:28:01
【问题描述】:

我是streamlit 的新手,我正在尝试显示带有列的pydeck 层。我希望列高是我在数据框中提供的rain (mm) 列,但是每当我使用get_evelation="rain (mm)" 时,都会出现以下错误:

Error: Function calls not allowed in JSON expressions
at http://localhost:8501/static/js/7.f6560317.chunk.js:2:512302
at u (http://localhost:8501/static/js/7.f6560317.chunk.js:2:512666)
at http://localhost:8501/static/js/7.f6560317.chunk.js:2:512596
at Array.forEach (<anonymous>)
at u (http://localhost:8501/static/js/7.f6560317.chunk.js:2:512568)
at u (http://localhost:8501/static/js/7.f6560317.chunk.js:2:512673)
at t.default (http://localhost:8501/static/js/7.f6560317.chunk.js:2:512250)
at e.h [as convertFunction] (http://localhost:8501/static/js/7.f6560317.chunk.js:2:1049691)
at http://localhost:8501/static/js/7.f6560317.chunk.js:2:2778265
at y (http://localhost:8501/static/js/7.f6560317.chunk.js:2:2778495)

我用来渲染地图的函数如下:

def make_map2(data, lat, lon, zoom):
    
    column_layer = pdk.Layer(
                             "ColumnLayer",
                             data=data,
                             get_position=["lon", "lat"],
                             get_elevation="rain (mm)",
                             elevation_scale=20,
                             radius=2000,
                             get_fill_color=[180, 0, 200, 140],
                             pickable=True,
                             auto_highlight=True,
                             extruded=True
    )

    tooltip={'html': 'Location: {location}</br> Date: {date} </br> Rainfall (mm): {rain_mm}</br> Type: {type}'}

    r = pdk.Deck(column_layer,
                 initial_view_state={
                                    "latitude": lat,
                                    "longitude": lon,
                                    "zoom": zoom,
                                    "pitch": 60
                                },
                 tooltip=tooltip,
                 map_provider="mapbox",
                 map_style='mapbox://styles/mapbox/light-v9',
                )

    map2 = st.write(r)

    return map2

输入数据有这样的结构:

        date        location    lat     lon     rain (mm)   type
0       2021-09-15  lowestoft   52.483  1.727   54.115513   predicted
1       2021-09-15  heathrow    51.479  -0.449  30.008739   predicted
2       2021-09-15  eastbourne  50.762  0.285   90.584396   predicted
3       2021-09-15  cambridge   52.245  0.102   51.445862   predicted
4       2021-09-15  manston     51.346  1.337   81.089737   predicted
5       2021-09-15  oxford      51.761  -1.262  39.420902   predicted

【问题讨论】:

    标签: javascript python node.js streamlit pydeck


    【解决方案1】:

    这可能就像一个拼写错误的参数一样简单:

    get_evelation="rain (mm)" 应该是get_elevation="rain (mm)"


    编辑:不管参数名称拼写错误,这个错误发生在 pydeck 解析字符串文字的方式中。 pydeck 假定 rain (mm) 是一个函数调用,并抛出一个错误。在不带空格或括号的情况下命名 get_elevation 列允许示例工作:

    import pandas as pd
    import numpy as np
    import streamlit as st
    import pydeck as pdk
    
    df = pd.read_csv("~/Desktop/data.csv")
    #to prove hypothesis, make column name one continuous string with no extra characters
    df["rain_noparens"] = df["rain (mm)"] 
    
    view = pdk.data_utils.compute_view(df[["lon", "lat"]])
    view.pitch = 75
    view.bearing = 60
    
    column_layer = pdk.Layer(
        "ColumnLayer",
        data=df,
        get_position=["lon", "lat"],
        get_elevation="rain_noparens",
        elevation_scale=20,
        radius=2000,
        get_fill_color=[180, 0, 200, 140],
        pickable=True,
        auto_highlight=True,
    )
    
    tooltip = {
        "html": "Location: {location}</br> Date: {date} </br> Rainfall (mm): {rain (mm)}</br> Type: {type}"
    }
    
    r = pdk.Deck(
        column_layer,
        initial_view_state=view,
        tooltip=tooltip,
        map_provider="mapbox",
        map_style="mapbox://styles/mapbox/light-v9",
    )
    
    st.pydeck_chart(r)
    

    另请参阅:https://github.com/streamlit/streamlit/issues/3992

    【讨论】:

    • 啊,很好看 - 谢谢。不幸的是,错误仍然存​​在。
    猜你喜欢
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    • 1970-01-01
    • 2012-03-17
    • 2015-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多