在上一篇文章:使用一行代码的交互式地理图中,我们讨论了为数据绘制地理图/地理可视化的重要性,因为它可能会揭示有趣的数据见解和模式,从而将你的数据科学项目提升到一个全新的水平。
此外,我们使用交互式Python包Holoviews生成了数据集的地理散点图,我们还将其部署到为用于演示目的的网页。
在本文中,我们将使用相同的数据集来生成类似的交互式地理图,但使用Plotly Express包。
Plotly express
在我们开始Plotly express之前,值得讨论一下Plotly是Python、R和其他编程语言中最领先、最流行的交互式绘图库之一。
Plotly Express是Plotly库的高级包装器,这意味着它调用了Plotly函数库的功能,但语法更简单。
通过介绍,让我们用一行代码来绘制我们的图。
编码
预备工作
import pandas as pd
# For Geovisualization
import plotly.express as px
加载数据集
df = pd.read_csv('data/Coffee Brands Footprint.csv',
index_col=0)
df.head()
PLOTLY EXPRESS 一行代码
px.scatter_geo(df,
lat = df['lat'],
lon = df['lng'],
color = df['brand'],
hover_name = df["name"],
width=1600,
height=800,
)
正如我们所看到的,我们已经制作了一个交互式地理图,但我们可以定制它并进一步改进它。
我们将进行以下改进:
- 将图集中在菲律宾。
- 将框架的焦点放在亚洲。
- 更改了散射点的不透明度或透明度。
要完成这三(3)件事很容易:我们只需为与这些所需更改相对应的参数提供参数,但首先,这是一个非常有用的提示:
提示:自动生成一个国家的地理代码
要自动提取某个国家的地理代码,请导入Nominatim,然后执行以下操作:
from geopy.geocoders import Nominatim
geolocator = Nominatim(user_agent="geocoder") #Do not forget to put in the user_agent argument (and should be a customized one)
location = geolocator.geocode("Philippines")
print((location.latitude, location.longitude))
现在,我们可以使用这些坐标来填充center。scope参数可用于改变大陆。探索projection参数,并查看你的绘图如何随每个选项而变化。
最后,我们可以使用不透明度参数更改点的透明度:
px.scatter_geo(df,
lat = df['lat'],
lon = df['lng'],
color = df['brand'],
hover_name = df["name"],
scope='asia',
projection='natural earth',
width=1600,
height=800,
center={
'lat': location.latitude,
'lon': location.longitude
},
opacity=0.5
)
优点和缺点
与其他库相比,易于使用本身是一个很大的优点,但也有缺点。
与其他库相比,plotly express的另一个优点是它可以支持动画(这是一篇不同的文章),这将是对我们已经印象深刻的可视化的一个很好的补充。
然而,缺点是,与folium甚至Holoviews等部署更容易的其他库相比,定制有限。
结束
对于那些想了解什么是交互式地理可视化以及如何进行交互式地理可视化的初学者来说,plotly express提供了一个完美的训练场地,供他们学习。
然而,随着我们的需求变得更加复杂,我们可能需要执行更多的计算并使用更多的低级库来完成这些任务,但我们将在接下来的文章中讨论这些问题。
感谢阅读!