我想在地图上绘制空间数据。我想使用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创建这样的图?
任何帮助或提示都将受到高度赞赏!
答案 0 :(得分:2)
如果您的熊猫DataFrame具有经度和纬度列,则可以在Altair中使用latitude
和longitude
编码通道。这是使用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'
)
注意:请确保您的latitude
和longitude
数据位于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