跳至内容
Python

使用 Plotly 库在 Python 中制作地图的分步指南

使用 Python 中的 Plotly 创建令人惊艳的地图,让您的数据脱颖而出
Moez Ali's photo
Moez Ali
已更新 · 7分钟 阅读

使用 AI 探索

ChatGPTClaudePerplexity

创建您的免费账户

实践并学习路径你的进步。

使用 Google 继续
继续操作即表示您接受我们的《使用条款》和《隐私政策》,并同意您的数据存储在美国。

各国预期寿命

几个世纪以来,地图一直被用来帮助人们导航并理解周围环境。在大数据时代,地图已成为数据可视化的必备工具。它们让我们以直观、交互、易理解的方式展示数据,帮助我们识别在其他可视化类型中不易察觉的模式和关系。

Plotly 是一个功能强大的 Python 数据可视化库,可用于创建各种交互式可视化,包括地图。Plotly 的一大优势在于它可与其他 Python 库(如 Pandas 和 NumPy)无缝协作。这使得导入与处理数据,以及按您的特定需求定制可视化变得十分容易。若您想学习 Plotly,欢迎查看我们的 Introduction to Data Visualization with Plotly in Python 课程。

在本教程中,您将一步步学习如何使用 Plotly 在 Python 中创建并自定义简单且交互式的地图。您还将学习如何创建分级着色地图(Choropleth),这是一种通过对特定地理区域(如国家、州或城市)进行颜色编码来表示数据的地图类型。

常见的 Plotly 地图可视化

让我们先来看一下可以用 Plotly 创建的不同类型的地图。

ScatterGeo 图

Scattergeo() 函数用于在地理地图上创建散点图。也就是说,它可以帮助您在地图上绘制点,每个点代表一个特定的地理位置,例如城市或地标。

例如,如果您有一个包含世界各地不同城市经纬度坐标的数据集,您可以使用 Scattergeo() 将每个城市绘制在世界地图上。

地图上的每个点都代表特定城市的位置,您可以自定义点的大小、颜色和形状,以表示城市的不同特征,如人口或温度。

该函数常用于数据可视化与分析应用中,如天气预报、人口分析和商业制图。通过展示数据点的空间分布并突出表格或常规图表中不易呈现的模式或趋势,它能帮助您以更有意义的方式理解数据。

在 Plotly 中创建 ScatterGeo 图示例

import plotly.express as px
import pandas as pd


# Import data from USGS
data = pd.read_csv('https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_month.csv')


# Drop rows with missing or invalid values in the 'mag' column
data = data.dropna(subset=['mag'])
data = data[data.mag >= 0]


# Create scatter map
fig = px.scatter_geo(data, lat='latitude', lon='longitude', color='mag',
                     hover_name='place', #size='mag',
                     title='Earthquakes Around the World')
fig.show()

输出: 

first plotly output

此代码示例使用 Plotly 创建全球地震位置的交互式地理地图。它从 USGS 网站导入地震数据到 pandas DataFrame,并删除震级缺失或无效的行。

随后,代码使用 px.scatter_geo 方法创建散点地图,展示地震位置,震级越大颜色越深。hover_name 参数设置为在悬停标记时显示位置名称。

最后,代码设置地图标题,并通过 fig.show() 显示地图。此类地图可用于探索地震模式并洞察全球地震活动。

自定义基础图表

1. 更改颜色比例:scatter_geo 函数中的 color 参数将地震的震级映射到标记颜色。您可以自定义颜色比例以更好地表现震级值。

fig = px.scatter_geo(data, lat='latitude', lon='longitude', color='mag',
                     hover_name='place', color_continuous_scale='reds',
                     title='Earthquakes Around the World')
fig.show()

输出:

Output 2

2. 更改标记大小:您可以自定义标记的大小,以更好地表示地震震级。

fig = px.scatter_geo(data, lat='latitude', lon='longitude', color='mag',
                     hover_name='place', size='mag', size_max=10,
                     title='Earthquakes Around the World')
fig.show()

输出:

Output 3

3. 更改背景颜色:您可以更改地图的背景颜色,让其更具视觉吸引力。

fig = px.scatter_geo(data, lat='latitude', lon='longitude', color='mag',
                     hover_name='place', color_continuous_scale='reds',
                     title='Earthquakes Around the World')
fig.update_layout(geo=dict(bgcolor='black'))
fig.show()

Output 4

如果您想进一步了解 Plotly 中的可视化可能性与高级自定义,请查看 Bekhruz Tuychiev 撰写的 Python Plotly Express 教程:解锁精美可视化。

将地图保存为交互式 HTML 文件

您可以使用 plotly.io 模块中的 write_html() 函数将 Plotly 图形保存为 HTML 文件。示例如下:

import plotly.io as pio
pio.write_html(fig, file='earthquakes.html', auto_open=True)

Output 5

分级着色地图(Choropleth)

分级着色地图是一种通过不同颜色或明暗程度来表示不同区域(如国家、州或省)数据值的地图。在这种地图中,每个区域会根据某个数据变量(如人口、收入或温度)的取值进行着色。

分级着色地图可用于多种场景,如选举地图、人口统计分析和地理数据可视化。它们能帮助您发现数据中在表格或一般图表里不易察觉的模式与趋势,并为与受众沟通信息提供一种有力方式。

尽管 Plotly 中的 scatter_geo 和 Choropleth 函数都用于创建地理可视化,但它们适用的数据类型及在地图上的呈现方式不同。scatter_geo 最适合在地图上绘制单个数据点,每个点代表一个具体地理位置,如城市、地标或地震。

相较之下,Choropleth 用于可视化按区域(如国家、州或省)汇总或平均后的数据。每个区域会根据某个数据变量(如人口密度、平均收入或失业率)的数值进行着色。

在 Plotly 中创建分级着色地图示例

import plotly.express as px
import pandas as pd


# Import data from GitHub
data = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/gapminder_with_codes.csv')


# Create basic choropleth map
fig = px.choropleth(data, locations='iso_alpha', color='gdpPercap', hover_name='country',
                    projection='natural earth', title='GDP per Capita by Country')
fig.show()

输出:

Output 6

请注意,我们的数据框中有时间维度 year,范围从 1952 年到 2007 年。我们可以利用该维度来为可视化添加动画。请看下面的示例。

示例数据集:

Sample Dataset

import plotly.express as px
import pandas as pd


# Import data from GitHub
data = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/gapminder_with_codes.csv')


# Create basic choropleth map
fig = px.choropleth(data, locations='iso_alpha', color='gdpPercap', hover_name='country',
                    projection='natural earth', animation_frame='year',
                    title='GDP per Capita by Country')
fig.show()

输出: 

Output 7

结论

在大数据时代,地图是数据可视化不可或缺的一部分。Plotly 是强大的 Python 数据可视化库,可用于创建多种交互式地图。通过 Scattergeo,您可以绘制对应于特定地理位置的数据点;而 Choropleth 则非常适合在区域、城市、国家等不同维度上可视化汇总数据。

如果您有兴趣探索 Plotly 中更高级的自定义选项或想进一步了解其功能,请查看 Python Plotly Express 速查表,其中提供了最常用 Plotly 函数与选项的快速参考。


Moez Ali's photo
Author
Moez Ali
LinkedIn
Twitter

数据科学家,PyCaret 的创始人兼作者

主题
Python