在Altair图表中绘制GeoPandas数据有没有更简单的方法?

时间:2018-08-22 14:46:29

标签: geopandas altair

GeoDataFrame中显示Altair的基本方法:

import altair as alt
import geopandas as gpd

alt.renderers.enable('notebook')

world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))

data  = alt.InlineData(values = world[world.continent=='Africa'].__geo_interface__, #geopandas to geojson
                       # root object type is "FeatureCollection" but we need its features
                       format = alt.DataFormat(property='features',type='json')) 
alt.Chart(data).mark_geoshape(
).encode( 
    color='properties.pop_est:Q', # GeoDataFrame fields are accessible through a "properties" object 
    tooltip=['properties.name:N','properties.pop_est:Q']
).properties( 

    width=500,
    height=300
)

Result

但是如果我添加具有NanDateTime值的列,它会崩溃。

1 个答案:

答案 0 :(得分:2)

  1. 首先,您可以使用world = alt.utils.sanitize_dataframe(world)来转换JSON不兼容类型的列。
  2. 或者您可以使用gpdvega模块来简化代码。
import altair as alt
import geopandas as gpd
import gpdvega 

alt.renderers.enable('notebook')

world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))

alt.Chart(world[world.continent=='Africa']).mark_geoshape(
).encode( 
    color='pop_est', 
    tooltip=['name','pop_est']
).properties( 
    width=500,
    height=300
)

result

pip install gpdvegaimport gpdvegaaltair将与GeoDataFrame一样照常DataFrame使用。查看documentation

中的详细信息