6

我想在地图上绘制空间数据。我想使用streamlit它,因为它似乎很容易使用,我想稍微探索一下。
首先尝试使用他们的内置deck_gl-API 绘制我的数据。这工作得很好,但由于我需要绘制字形/图标并且IconLayer还没有内置streamlit,我需要切换到另一个库。

我读过它Altair应该很适合我,而且它也得到了streamlit. 但是,altair当我不使用其中一个vega_datasets.

我的数据位于具有以下结构的数据框中:

|   latitude   |   longitude   |   temperature   |  
| ------------ | ------------- | --------------- |  
| -122.23123   | 38.2321       | 23              | 
| -122.2321    | 28.2342       | 25              |

如何使用 altair 创建这样的情节?

非常感谢任何帮助或提示!

旧金山湾水温图

4

1 回答 1

8

如果您有一个带有纬度和经度列的 pandas DataFrame,那么您可以在 Altair 中使用latitudelongitude编码通道。这是一个使用 vega_datasets 的示例(它看起来像您的数据)。

import altair as alt
from vega_datasets import data

df = data.airports()
df = df[df.state=='TX']
df.reset_index(inplace=True)
df.head()

桌子

alt.Chart(df).mark_point().encode(
    latitude='latitude',
    longitude='longitude',
    color='index'
)

图表

注意:确保您的latitudelongitude数据在 WGS-84 (EPSG:4326) 投影中。

目前,向数据中添加底图有点困难。我相信有人会想出一个很好的方法来使用Vega-lite 中的新图像标记(将包含在 Altair 4 中),因为 Vega(问题编辑器)和Vega-Lite(问题编辑)。

更新:

要为您的地图添加更多上下文,您可以使用 geopandas 添加其他形状,如下所示:

import geopandas as gpd
gdf = gpd.read_file('https://raw.githubusercontent.com/python-visualization/folium/master/tests/us-states.json', driver='GeoJSON')
gdf = gdf[gdf.id=='TX']

base = alt.Chart(gdf).mark_geoshape(
    stroke='gray', 
    fill=None
)

pts = alt.Chart(df).mark_point().encode(
    latitude='latitude',
    longitude='longitude',
    color='index'
)

base + pts

上下文图

于 2019-12-08T20:46:08.767 回答