st.deck_gl_chart - 显示Deck.GL图表
streamlit的deck_gl_chart
使用Deck.GL库显示基于地图的图表。该方法
遵循Deck.GL的JavaScript API,并
补充了细微的调整及一些语法糖。
方法原型
streamlit.deck_gl_chart(spec=None, **kwargs)
参数:
- spec:图表规格对象字典,键可以是:
- Deck.GL的顶层元素接受的任何参数,例如: “viewport”, “height”, “width”.
- layers: 字典列表,用于在地图上创建新的Deck.GL图层。每个图层都支持以下键:
- data:当前图层的数据,DataFrame对象
- type:Deck.GL图层类型,字符串,streamlit目前支持的类型包括:ArcLayer, GridLayer, HexagonLayer, LineLayer, PointCloudLayer, ScatterplotLayer, ScreenGridLayer, TextLayer.
- encoding: 图表属性到数据集字段的映射字典,具体支持的字段取决于前面的type定义。
例如,ScatterplotLayer类型的图层支持getRadius字段来设置图表中的圆半径,那么你
可以如下设置encoding键值:
{"getRadius": "my_column:}
,其中my_column
是包含 半径数据的字段名。 - 任何图层支持的键。例如对于ScatterplotLayer你可以设置字段opacity等。
- **kwargs :与spec等效,但是用关键字参数。
示例代码
为方便起见,如果你传入数据帧而没有图表规格,将得到scatter图:
>>> df = pd.DataFrame(
... np.random.randn(1000, 2) / [50, 50] + [37.76, -122.4],
... columns=['lat', 'lon'])
...
>>> st.deck_gl_chart(layers = [{
'data': df,
'type': 'ScatterplotLayer'
}])
效果如下:
DataFrame对象必须包含字段lat
/latitude
或lon
/longitude
。
如果你希望实现一些有趣的特性,可以在传入的图表规格中指定数据,而不使用顶层dataframe。例如:
>>> st.deck_gl_chart(
... viewport={
... 'latitude': 37.76,
... 'longitude': -122.4,
... 'zoom': 11,
... 'pitch': 50,
... },
... layers=[{
... 'type': 'HexagonLayer',
... 'data': df,
... 'radius': 200,
... 'elevationScale': 4,
... 'elevationRange': [0, 1000],
... 'pickable': True,
... 'extruded': True,
... }, {
... 'type': 'ScatterplotLayer',
... 'data': df,
... }])
...
效果如下: