交互式地理可视化第4部分-Altair

2023-01-31 12:35 428 阅读 ID:743
磐创AI
磐创AI

在本系列中,我们已经确定了三(3)种制作漂亮地理图的方法。

  • 交互式地理可视化第1部分-Holoviews
  • 交互式地理可视化第2部分-Plotly Express
  • 交互式地理可视化第3部分-Plotly Graph Objects(Go)

在本文中,我们将学习如何使用数据科学社区中最著名的plotly包竞争对手之一Altair创建类似的图表。

ALTAIR

Altair与Plotly Express相似,因为它是一种高级声明性语言,类似于holoviews和ggplot。这意味着我们为了便于使用而交换控制权。

与其他图表不同,Altair侧重于使用图形语法,从单个图表创建组合图表更容易,类似于组合单词形成人类句子的方式。这使得Altair的语法非常接近ggplot,这对R用户来说是一个优势。

Altair也有我们所说的“交互语法”,它可以很容易地在小部件和绘图之间以及绘图本身之间创建交互。例如,在下面的图表中,与图表左侧的交互将模拟我们与右侧的交互,只要它们属于同一图表。

最后,当涉及到外观时,Altair将在调整绘图大小时保留绘图元素。与其他可视化库不同,当我们不断添加更多类别时,这非常有用,因为其他可视化库维护的是总体绘图属性(图形大小),从而扭曲绘图元素。

编码

环境

与其他人一样,让我们加载我们的包:

import pandas as pd
import altair as alt

import geopandas as gpd
from shapely.geometry import Point

alt.renderers.enable('default') #Allows the map to be displayed in the notebook/Jupyterlab

加载数据集

加载以下数据集:

df = pd.read_csv('data/Coffee Brands Footprint.csv',
                index_col=0)

df.head()

使用Altair时的一点警告:Altair使用数据转换器,并要求所有列都是“JSON可序列化”的。这意味着你的列中不应该有几何数据类型。

现在,与Plotly不同,我们需要导入自己的形状文件来提供地图的边界。https://gadm.org/当涉及到形状文件时,几乎提供了你所需要的一切。

加载形状文件

#Load the geodataframe
gdf = gpd.read_file('Shapefiles/gadm36_PHL_shp/gadm36_PHL_1.shp')

#Options When It Comes to Boundaries of the Shapefile

philippines = alt.Chart(gdf).mark_geoshape(stroke='white',
                            fill='lightgray').encode().properties(width=400,
                                                                 height=800).project('mercator')

philippines

让我们回顾一下上面的一些选项:

  • alt.Chart-此代码从提供的数据集创建Altair图表。在这种情况下,我们提供了GeoDataFrame。
  • mark_geoshape-这个命令让Altair知道数据帧的属性在绘图中应该如何精确表示;在我们的例子中,它是一个地理形状。
  • stroke-这是指线条颜色或地理数据帧的边界。边界越详细,这个参数就越重要。
  • fill-地图的颜色填充。
  • encode-这是将列映射到地图的代码部分。
  • properties-我们使用它来更改绘图(或图形)本身的宽度、高度或任何其他属性。
  • project-投影类型。在我们的情况下是可选的。

绘制地理地图

下面的代码将创建类似于我们最后三(3)篇文章的散点图:

points = alt.Chart(df).mark_circle(opacity=0.7).encode(
    longitude='lng:Q',
    latitude='lat:Q',
    size=alt.value(10),
    color='brand',
    tooltip=['brand', 'vicinity'])

points

()

这些参数与我们用于地理形状的参数非常相似,但请注意,对于geoscatterplots,我们需要填写经度和纬度的参数或参数。

请注意,提供该参数的格式为“column_name:Q”。因为我们的经度列被命名为“lng”,所以提供给经度列的值是lng:Q。还要注意,对于size参数,我们也使用了alt.value。

将两个图合并

最后,Altair地图的一个非常酷的特性,特别是地理可视化,就是你可以简单地添加我们之前创建的两个地图。

points | philippines + points

最后

Altair被认为是一个高级声明性库,因此它的易用性必须与巧妙表达相比较。由于它能够读取我们导入的形状文件,因此它能够变得更加优雅,尤其是在具有较低级别边界的情况下。

虽然Altair同样适用于地理地图,但它同样适用于choropleth。当我们尝试使用不同的包创建choropeth时,请继续关注。

感谢阅读!

免责声明:作者保留权利,不代表本站立场。如想了解更多和作者有关的信息可以查看页面右侧作者信息卡片。
反馈
to-top--btn