用 Python 绘制中国城市地图数据主要用于对地理数据进行可视化分析。这种方法可以帮助您更直观地了解数据的分布情况,并为您提供关于数据之间的相关性的更深入的理解。例如,您可以通过使用地图数据绘制中国城市人口分布图,以了解每个城市的人口数量和密度。您还可以通过使用地图数据绘制中国城市的经济数据,以了解每个城市的经济活动情况,包括贸易额、工业产值等。本例,我们利用 pandas 和 pyecharts 来完成相关需求。
需求
首先生成测试数据,并读取为 pandas 的 DataFrame,随机数据用 Python 内置的 random。
import pandas as pd
import random
random.seed(66)
random.seed(66)
cities = ['北京市', '上海市', '广州市', '深圳市', '天津市',
'武汉市', '重庆市', '成都市', '东莞市', '西安市',
'沈阳市', '青岛市', '大连市', '宁波市', '厦门市',
'长沙市', '哈尔滨市', '南京市', '郑州市', '合肥市',
'苏州市', '常州市', '无锡市', '昆明市', '南昌市',
'南宁市', '济南市', '长春市', '福州市', '佛山市',
'温州市', '石家庄市', '太原市', '唐山市', '烟台市',
'中山市', '泉州市', '南通市', '扬州市', '徐州市',
'盐城市', '淄博市', '洛阳市', '柳州市', '泰州市',
'丽江市', '海口市', '三亚市', '长治市', '桂林市',
'大庆市', '兰州市', '贵阳市', '南阳市', '邯郸市',
'保定市', '呼和浩特市', '沧州市', '廊坊市', '衡阳市',
'商丘市', '南充市', '临沂市', '漯河市', '阜阳市',
'景德镇市', '江门市', '茂名市', '惠州市', '芜湖市',
'淮安市', '马鞍山市', '绵阳市', '乌鲁木齐市', '拉萨市',
'西宁市', '德阳市', '绍兴市', '金华市', '嘉兴市']
df = pd.DataFrame({'城市': cities,
'数值': [random.randint(1, 20) for i in cities]
})
df.head()
'''
城市 数值
0 北京市 3
1 上海市 10
2 广州市 14
3 深圳市 8
4 天津市 15
'''
数据生成完成,接下来我们开始分析如何完成需求。
思路
Pyecharts是一款开源的 Python 图表绘制库,支持多种图表类型的绘制,例如饼图,折线图,散点图,条形图,柱形图等。同时它还支持生成地图图表。
使用 Pyecharts 生成地图图表需要以下步骤:
- 安装 Pyecharts 库:可以使用 pip 命令进行安装:
pip install pyecharts
- 导入需要的模块:导入 Map 模块以及其相关配置选项:
from pyecharts import options as opts
from pyecharts.charts import Map
- 数据准备:需要准备地图所需的数据,通常是城市数据和对应的数值数据。
- 生成地图:使用 Map 模块的 add 方法,配置地图的相关选项,例如标签,图例,视觉效果等。
- 呈现地图:调用 render 方法,或者使用 render_notebook 方法将地图呈现在 Jupyter Notebook 中。
以上是生成地图图表的基本流程。Pyecharts 提供了丰富的配置选项,可以根据需要调整图表样式。
在这个需求中,我们用它来完成。
代码
先导入相关的库,同时将 Notebook 设置为我们使用的 jupyterlab:
from pyecharts import options as opts
from pyecharts.globals import CurrentConfig
from pyecharts.charts import Map
import pandas as pd
CurrentConfig.NOTEBOOK_TYPE = 'jupyter_lab'
先将数据构造成 pyecharts 需要的列表对为元素的列表,这里用到 pandas 的应用方法操作:
data = df.loc[:, '城市':].apply(list, axis=1).to_list()
data
'''
[['北京市', 3],
['上海市', 10],
['广州市', 14],
...
['金华市', 20],
['嘉兴市', 17]]
'''
接下来编写地图展示功能:
c = (
Map(init_opts=opts.InitOpts(width='1100px', height='1000px'))
.add(
'城市',
data,
'china-cities',
label_opts=opts.LabelOpts(is_show=False),
is_map_symbol_show=False,
)
.set_global_opts(
visualmap_opts=opts.VisualMapOpts(min_=0,
max_=20,
is_show=False),
legend_opts=opts.LegendOpts(is_show=False)
)
# .render('map_china_cities.html')
)
分别在不同的 jupyterlab 单元格执行以下代码就可以看到地图可视化效果。
c.load_javascript()
c.render_notebook()
以上 Python 代码主要是使用了 pyecharts 库和 pandas 库来绘制中国地图,并将某个城市的数据可视化展示。
- 首先,导入了 pyecharts 库中的选项、全局变量、地图图表等模块。
- 然后,将 pyecharts 全局配置环境设置为 Jupyter Lab 环境。
- 接着,使用 pandas 库构造随机数据,以 DataFrame 结构存入变量 'df' 中。
- 然后,调用 head() 函数展示 'df' 的前几行数据。
- 定义变量 'data',将 'df' 中除了 '城市' 以外的数据列,通过 apply() 函数转换为列表,并调用 to_list() 函数转换为 Python 列表。
- 然后,使用 Map 类创建地图图表,并设置图表的大小、标题、数据源等。
- 通过 set_global_opts() 函数设置图表的全局配置选项,如:设置可视化范围、图例等。
- 设计虚拟映射功能的最大值和最小值,根据我们的随机数据最大值为20;不显示DataFrame下角的映射调节工具
- 最后,通过 render_notebook() 函数将图表展示在 JupyterLab 的 Notebook 中。
这样就完成发需求,可以修改以上参数的值重新执行查看结果以理解它们的作用。
(完)