使用PyDeck库绘制图表。
这支持3D地图、点云等!更多关于PyDeck的信息请访问https://deckgl.readthedocs.io/en/latest/。
这些文档也非常有用:
- DeckGL 文档: https://github.com/uber/deck.gl/tree/master/docs
- DeckGL JSON 文档: https://github.com/uber/deck.gl/tree/master/modules/json
使用此命令时,Mapbox 提供地图瓦片以渲染地图内容。请注意,Mapbox 是第三方产品,Streamlit 对 Mapbox 或 Mapbox 提供的任何内容或信息不承担任何责任或义务。
Mapbox 要求用户注册并提供令牌,然后用户才能请求地图瓦片。目前,Streamlit 为您提供了此令牌,但这可能随时更改。我们强烈建议所有用户创建并使用自己的个人 Mapbox 令牌,以避免对其体验造成任何中断。您可以使用 mapbox.token 配置选项来执行此操作。Mapbox 的使用受 Mapbox 使用条款的约束。
要为自己获取令牌,请在https://mapbox.com创建一个账户。 有关如何设置配置选项的更多信息,请参阅 https://docs.streamlit.io/develop/api-reference/configuration/config.toml。
函数签名[source] | |
---|---|
st.pydeck_chart(pydeck_obj=None, *, use_container_width=False, width=None, height=None, selection_mode="single-object", on_select="ignore", key=None) | |
参数 | |
pydeck_obj (pydeck.Deck or None) | 指定要绘制的PyDeck图表的对象。 |
use_container_width (bool) | 是否用父容器的宽度覆盖图形的原生宽度。如果use_container_width是False (默认),Streamlit会根据绘图库设置图表的宽度以适应其内容,直到父容器的宽度。如果use_container_width是True,Streamlit会将图形的宽度设置为与父容器的宽度匹配。 |
width (int or None) | 图表所需的宽度,以像素表示。如果 width 是 None(默认值),Streamlit 会根据绘图库将图表的宽度设置为适合其内容,最大不超过父容器的宽度。如果 width 大于父容器的宽度,Streamlit 会将图表宽度设置为与父容器的宽度匹配。 要使用 width,必须设置 use_container_width=False。 |
height (int or None) | 图表所需的高度,以像素表示。如果height是None(默认值),Streamlit会根据绘图库自动调整图表的高度以适应其内容。 |
on_select ("ignore" 或 "rerun" 或 callable) | 图表应如何响应用户选择事件。这控制图表是否表现得像一个输入小部件。 on_select 可以是以下之一:
如果 on_select 不是 "ignore",所有层必须声明一个 id 以保持图表在重新运行时的状态。 |
selection_mode ("single-object" 或 "multi-object") | 图表的选取模式。可以是以下之一:
|
key (str) | 一个可选的字符串,用于给这个元素一个稳定的身份。如果 key 是 None(默认值),这个元素的身份将基于其他参数的值来确定。 此外,如果启用了选择并且提供了 key,Streamlit 将在会话状态中注册该键以存储选择状态。选择状态是只读的。 |
返回 | |
(element or dict) | 如果 on_select 是 "ignore"(默认值),此命令返回一个 图表元素的内部占位符。否则,此方法 返回一个类似字典的对象,支持键和 属性表示法。属性由 PydeckState 字典模式描述。 |
示例
这里有一个使用HexagonLayer和ScatterplotLayer的图表。它根据当前激活的Streamlit主题使用浅色或深色地图样式:
import streamlit as st import pandas as pd import numpy as np import pydeck as pdk chart_data = pd.DataFrame( np.random.randn(1000, 2) / [50, 50] + [37.76, -122.4], columns=["lat", "lon"], ) st.pydeck_chart( pdk.Deck( map_style=None, initial_view_state=pdk.ViewState( latitude=37.76, longitude=-122.4, zoom=11, pitch=50, ), layers=[ pdk.Layer( "HexagonLayer", data=chart_data, get_position="[lon, lat]", radius=200, elevation_scale=4, elevation_range=[0, 1000], pickable=True, extruded=True, ), pdk.Layer( "ScatterplotLayer", data=chart_data, get_position="[lon, lat]", get_color="[200, 30, 0, 160]", get_radius=200, ), ], ) )注意
为了使PyDeck图表的样式与Streamlit的主题保持一致, 你可以在pydeck.Deck对象中设置map_style=None。
Chart selections
属性 | |
selection (dict) | on_select 事件的状态。此属性返回一个类似字典的对象,支持键和属性表示法。 属性由 PydeckSelectionState 字典模式描述。 |
PyDeck 图表选择状态的模式。
选择状态存储在一个类似字典的对象中,该对象支持键和属性表示法。选择状态不能通过会话状态以编程方式更改或设置。
您必须在pydeck.Layer中定义id,以确保在使用st.pydeck_chart进行选择时保持状态。
属性 | |
indices (dict[str, list[int]]) | 按层选择的对象的字典。字典中的每个键是一个层ID,每个值是该层内对象的索引列表。 |
objects (dict[str, list[dict[str, Any]]]) | 按层划分的对象属性字典。字典中的每个键是一个层ID,每个值是该层中选定对象的元数据字典列表。 |
示例
以下示例启用了多对象选择功能。图表显示了根据人口(2023年美国人口普查估计)排列的美国州首府。您可以从GitHub访问此数据。
import streamlit as st import pydeck import pandas as pd capitals = pd.read_csv( "capitals.csv", header=0, names=[ "Capital", "State", "Abbreviation", "Latitude", "Longitude", "Population", ], ) capitals["size"] = capitals.Population / 10 point_layer = pydeck.Layer( "ScatterplotLayer", data=capitals, id="capital-cities", get_position=["Longitude", "Latitude"], get_color="[255, 75, 75]", pickable=True, auto_highlight=True, get_radius="size", ) view_state = pydeck.ViewState( latitude=40, longitude=-117, controller=True, zoom=2.4, pitch=30 ) chart = pydeck.Deck( point_layer, initial_view_state=view_state, tooltip={"text": "{Capital}, {Abbreviation}\nPopulation: {Population}"}, ) event = st.pydeck_chart(chart, on_select="rerun", selection_mode="multi-object") event.selection
这是从具有ID "captial-cities" 的图层中选择单个对象时的选择状态示例:
{ "indices":{ "capital-cities":[ 2 ] }, "objects":{ "capital-cities":[ { "Abbreviation":" AZ" "Capital":"Phoenix" "Latitude":33.448457 "Longitude":-112.073844 "Population":1650070 "State":" Arizona" "size":165007.0 } ] } }
还有问题吗?
我们的 论坛 充满了有用的信息和Streamlit专家。