本文将详细介绍使用Plotly库在Python环境下实现绘制中国地图,并探讨如何在地图中展示省份、城市数据,以及如何美化地图样式。
一、绘制中国地图
使用Plotly绘制中国地图非常简单,只需要安装Plotly库,调用绘图函数即可。下面是一个简单的示例代码,Python版本为3.7:
import plotly.graph_objs as go
import plotly.io as pio
# 构造地图数据
data = [go.Choropleth(
locations=['CN'], # 只绘制中国地图
z=[1], # 给每个区域赋值,这里只需要赋值1
locationmode='ISO-3', # 国际标准的表示区域的方式
colorscale=[[0, '#FFFFFF'], [1, '#AAAAAA']], # 设置颜色,白色和深灰色
showscale=False)] # 不显示标尺
# 设置布局
layout = go.Layout(geo=dict(showframe=False, # 不显示边框
showcoastlines=False, # 不显示海岸线
projection=dict(type='mercator'))) # 设置地图的投射方式(投影方式)
# 绘制地图
fig = go.Figure(data=data, layout=layout)
pio.show(fig)
运行上述代码,就可以看到生成的中国地图。绘制中国地图的核心组件是Choropleth。这个组件可以用来绘制各种类型的地图(如国家地图、行政区域地图、城市地图等),只需要提供相应的数据即可。
二、展示省份、城市数据
在地图上展示省份或城市的数据,需要使用到中国的行政区划数据。这里推荐使用的是中华人民共和国民政部发布的“中华人民共和国行政区划代码”。我们可以使用Python的pandas库导入csv格式的行政区划数据,然后进行地图绘制。
1. 绘制省份地图
我们可以通过合并Excel表格的方式,将每个省份的数据都整合到一个Excel文件中。下面是一个示例代码,用于绘制各省份人口分布图:
import pandas as pd
import plotly.graph_objs as go
import plotly.io as pio
# 读取省份数据
df = pd.read_excel('population.xlsx')
# 计算省份人口所占比例,最大为1,最小为0.1
df['Proportion'] = df['Population'] / df['Population'].max() * 0.9 + 0.1
# 构建地图数据
data = [go.Choropleth(
locations=df['Code'], # 省份的行政区划代码
text=df['Province'], # 省份名称
z=df['Proportion'], # 省份人口所占比例
locationmode='ISO-3',
colorscale='Reds',
autocolorscale=False,
marker_line_color='white')]
# 设置布局
layout = go.Layout(title='中国各省份人口分布图',
geo=dict(showframe=False,
showcoastlines=False,
projection=dict(type='mercator')))
# 绘制地图
fig = go.Figure(data=data, layout=layout)
# 显示地图
pio.show(fig)
上述代码中,`pd.read_excel('population.xlsx')`读取了一个Excel文件,里面包含了各个省份的行政区划代码、人口数等信息;通过计算每个省份的人口所占比例,可以控制各个省份在地图中的显示大小。
2. 绘制城市点状地图
在地图上展示城市数据,可以使用散点图或点状地图。下面是一个简单的点状地图示例:
import pandas as pd
import plotly.graph_objs as go
import plotly.io as pio
# 读取城市数据
df = pd.read_excel('cities.xlsx')
# 构建地图数据
data = [go.Scattergeo(
lon=df['Longitude'], # 经度
lat=df['Latitude'], # 纬度
text=df['City'], # 城市名
mode='markers',
marker=dict(size=df['Population'] / 500000, # 点的大小,和城市人口数相关
color=df['GDP'],
colorbar=dict(title='GDP'),
colorscale='Blues'))]
# 设置布局
layout = go.Layout(title='中国城市经济发展情况(点状地图)',
geo=dict(showframe=False,
showcoastlines=False,
projection=dict(type='mercator')))
# 绘制地图
fig = go.Figure(data=data, layout=layout)
# 显示地图
pio.show(fig)
上述代码中,`pd.read_excel('cities.xlsx')`读取了一个Excel文件,包含了各个城市的名称、经纬度、人口、GDP等信息。根据每个城市的经纬度和相关指标值(如人口、GDP等),在地图上绘制相应的点,点的大小和颜色可以根据指标赋值不同的数值,以达到更好的可视化效果。
三、美化地图样式
地图的样式美化可以从多个方面进行。下面介绍几种常用的美化方式。
1. 调整地图颜色
地图颜色是一个非常重要的调整点,可以根据需求进行个性化的设置。Plotly提供了多种颜色序列,可以通过传入相应的参数进行设置。例如:
data = [go.Choropleth(
locations=df['Code'],
text=df['Province'],
z=df['Proportion'],
locationmode='ISO-3',
autocolorscale=False,
colorscale=[
[0.0, '#FFE4E1'], # 粉红色
[0.5, '#FFB6C1'], # 浅粉红色
[1.0, '#FF69B4'] # 热情的粉红色
],
marker_line_color='white')]
上述代码中,`colorscale`参数设置了三个颜色,用于表示比例大小的不同程度。可通过 `autocolorscale=False`将色彩积分设置为手动,以控制自己的色彩映射。
2. 自定义标注
地图上的标注(例如省份名称、城市名称)是非常重要的,可以使用Plotly的标注组件go.Annotation()进行自定义。例如:
data = [go.Scattergeo(
lon=df['Longitude'],
lat=df['Latitude'],
text=df['City'],
mode='markers',
marker=dict(size=df['Population'] / 500000,
color=df['GDP'],
colorbar=dict(title='GDP'),
colorscale='Blues'))]
annotations = [
dict(
showarrow=False,
align='right',
text='北京',
lon=116.4074, # 经度
lat=39.9042, # 纬度
font=dict(size=12)
),
dict(
showarrow=False,
align='right',
text='上海',
lon=121.4737,
lat=31.2304,
font=dict(size=12)
)]
layout = go.Layout(
title='中国城市经济发展情况(点状地图)',
geo=dict(
showframe=False,
showcoastlines=False,
projection=dict(type='mercator')),
annotations=annotations)
# 绘制地图
fig = go.Figure(data=data, layout=layout)
# 显示地图
pio.show(fig)
上述代码中,`annoations`参数设置了两个标注,表示北京和上海的位置。标注的位置需要按照经纬度进行设置。
3. 修改地图显示范围
默认情况下,地图的显示范围是根据数据自适应的。有时候,我们需要手动控制地图的显示范围,例如只显示中国的西南部分。可以通过设置`layout.geo.fitbounds`属性来实现,例如:
layout = go.Layout(
title='中国城市经济发展情况(点状地图)',
geo=dict(showframe=False,
showcoastlines=False,
projection=dict(type='mercator'),
fitbounds='locations'))
上述代码中,设置了`fitbounds='locations'`,表示按照地图的数据范围进行自适应调整。
四、总结
本文介绍的内容包括使用Plotly绘制中国地图、展示省份、城市数据、美化地图样式等。使用Plotly可以很方便地进行数据可视化,并且支持非常多的图表类型,包括常用的散点图、折线图、柱状图、热力图等。