使用Altair在单个地图上绘制空间数据

时间:2019-12-08 17:39:30

标签: python altair streamlit

我想在地图上绘制空间数据。我想使用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创建这样的图?

任何帮助或提示都将受到高度赞赏!

San Francisco Bay water Temperature plot

1 个答案:

答案 0 :(得分:2)

如果您的熊猫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()

table

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

chart

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

目前在数据中添加底图有些困难。我确信有人会在Vega-lite(将包含在Altair 4中)中使用新的image mark提出一个好的方法,因为Vega中已经有一个有效的概念证明({{3 }},issue)。

更新:

要在地图上添加更多背景信息,您可以使用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

context map