在本系列中,我们已经确定了三(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时,请继续关注。
感谢阅读!