背景:根据各省频率绘制地图
根据各省频率绘制地图,可以使用 Pyecharts 绘制。下面是详细的步骤:
1、安装 Pyecharts:可以通过 !pip install pyecharts
命令安装。
2、导入相关库
import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Map
3、准备数据:需要将各省份和对应频率存储在一个 DataFrame 中,其中列名为 "province" 和 "frequency"。例如:
df = pd.DataFrame({
"province": ["北京市", "天津市", "河北省", "山西省", "内蒙古自治区", "辽宁省",
"吉林省", "黑龙江省", "上海市", "江苏省", "浙江省", "安徽省",
"福建省", "江西省", "山东省", "河南省", "湖北省", "湖南省",
"广东省", "广西壮族自治区", "海南省", "重庆市", "四川省", "贵州省",
"云南省", "西藏自治区", "陕西省", "甘肃省", "青海省", "宁夏回族自治区",
"新疆维吾尔自治区"],
"frequency": [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120,
130, 140, 150, 160, 170, 180, 190, 200, 210, 220,
230, 240, 250, 260, 270, 280, 290, 300, 310]
})
4、绘制地图:使用 Pyecharts 中的 Map 类,将各省份和对应频率填入其中,并设置地图属性。
map_chart = (
Map() # 创建地图对象
.add("各省份频率分布", [list(z) for z in zip(df["province"], df["frequency"])], "china") # 添加数据,设置地图类型
.set_global_opts(
title_opts=opts.TitleOpts(title="各省份频率分布图"),
visualmap_opts=opts.VisualMapOpts(max_=310, is_piecewise=True), # 设置视觉映射配置,控制颜色范围
)
)
map_chart.render_notebook() # 在 Jupyter Notebook 中渲染图表
完整代码如下:
import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Map
df = pd.DataFrame({
"province": ["北京市", "天津市", "河北省", "山西省", "内蒙古自治区", "辽宁省",
"吉林省", "黑龙江省", "上海市", "江苏省", "浙江省", "安徽省",
"福建省", "江西省", "山东省", "河南省", "湖北省", "湖南省",
"广东省", "广西壮族自治区", "海南省", "重庆市", "四川省", "贵州省",
"云南省", "西藏自治区", "陕西省", "甘肃省", "青海省", "宁夏回族自治区",
"新疆维吾尔自治区"],
"frequency": [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120,
130, 140, 150, 160, 170, 180, 190, 200, 210, 220,
230, 240, 250, 260, 270, 280, 290, 300, 310]
})
map_chart = (
Map() # 创建地图对象
.add("各省份频率分布", [list(z) for z in zip(df["province"], df["frequency"])], "china") # 添加数据,设置地图类型
.set_global_opts(
title_opts=opts.TitleOpts(title="各省份频率分布图"),
visualmap_opts=opts.VisualMapOpts(max_=310, is_piecewise=True), # 设置视觉映射配置,控制颜色范围
)
)
map_chart.render_notebook() # 在 Jupyter Notebook 中渲染图表
运行结果:
如果想绘制动态显示的地图:即随着时间的变化,各省份相关数据频率也发生变化,地图中颜色在动态变化显示。
完整代码如下:
from pyecharts import options as opts
from pyecharts.charts import Map, Timeline
import numpy as np
province_dis = {'宁夏回族自治区':155,'河南省':355, '北京市': 117, '河北省': 521, '辽宁省': 612, '江西省': 126, '上海市':1520, '安徽省': 230, '江苏省': 226, '湖南省': 449,'浙江省': 553, '海南省': 512, '广东省': 712, '湖北省': 118, '黑龙江省': 111, '澳门特别行政区': 191, '陕西省': 211, '四川省': 717, '内蒙古自治区': 113, '重庆市': 13,'广西壮族自治区':81,'云南省': 216, '贵州省': 121, '吉林省': 131, '山西省': 131, '山东省': 111, '福建省': 341, '青海省': 151, '天津市': 131,'新疆维吾尔自治区':150,'西藏自治区':170,'甘肃省':120,'台湾省':31}
provice = list(province_dis.keys())
values = list(province_dis.values())
province_dis1 = {'宁夏回族自治区':55,'河南省': 145, '北京市': 137, '河北省': 121, '辽宁省': 112, '江西省': 16, '上海市':120, '安徽省': 110, '江苏省': 116, '湖南省': 119,'浙江省': 113, '海南省': 12, '广东省': 212, '湖北省': 18, '黑龙江省': 111, '澳门特别行政区': 11, '陕西省': 111, '四川省': 17, '内蒙古自治区': 13, '重庆市': 13,'广西壮族自治区':81,'云南省': 16, '贵州省': 21, '吉林省': 31, '山西省': 11, '山东省': 111, '福建省': 41, '青海省': 51, '天津市': 11,'新疆维吾尔自治区':150,'西藏自治区':170,'甘肃省':120,'台湾省':31}
values1 = list(province_dis1.values())
sum_vlaues=[]
sum_vlaues.append(values),sum_vlaues.append(values1)
tl = Timeline()
for i in range(2015, 2017):
map_min=int(np.min(sum_vlaues[i-2015]))
map_max=int(np.max(sum_vlaues[i-2015]))
china = (
Map()
.add("", [list(z) for z in zip(provice, sum_vlaues[i-2015])], "china")
.set_global_opts(title_opts=opts.TitleOpts(title="中国地图"), visualmap_opts=opts.VisualMapOpts(type_='color',min_=map_min,max_=map_max))
)
tl.add(china, "{}年".format(i))
tl.add_schema(is_auto_play=True, play_interval=1000) # 自动播放,跳动的间隔为1000ms
tl.render_notebook()
运行结果(2015年动态地图):
2016年动态地图:
注意:Pyecharts地图构建为什么不显示颜色和内容呢?
运行结果显示就一个灰白的地图,心想着明明有传入数据,为啥不根据频率显示颜色呢?
原因:传入的数据中,各省市的名称必须要和地图上显示的名称一致,不能简写。如有简写,则需要将北京改为北京市,如果有自治区,就写内蒙古自治区,湖南要写成湖南省,澳门要写成澳门特别行政区。