pyecharts绘制地图
11
·
最近写PPT需要整个总结性的图,找来找去还是python简单一点,废话不多说,记录一下自己的心得吧。
一、初始简单图片
这里用新疆举例,因为新疆地块图比较不规整(是不是名字太长,点位太近,迷了眼,文章后面会说怎么调整能更好一点)
附代码:
from pyecharts.charts import Map # 注意这里与老版本pyecharts调用的区别
from pyecharts import options as opts
import random
titlename = "新疆GDP"
city = ['乌鲁木齐市','昆玉市','哈密市','巴音郭楞蒙古自治州','吐鲁番市','阿勒泰地区','北屯市','塔城地区','克拉玛依市','双河市','博尔塔拉蒙古自治州','可克达拉市','伊犁哈萨克自治州','昌吉回族自治州','石河子市','阿克苏地区','阿拉尔市','巴音郭楞蒙古自治州','喀什地区','克孜勒苏柯尔克孜自治州','图木舒克市','铁门关市','五家渠市']
#这个给对应的市附上数值
data_city = [(i, random.randint(100, 200)) for i in city]
#当然,data_city也可以自己设置数值,如下
#[('乌鲁木齐市', 170), ('昆玉市', 171), ('哈密市', 106), ('巴音郭楞蒙古自治州', 140), ('吐鲁番市', 127), ('阿勒泰地区', 109), ('北屯市', 119), ('塔城地区', 115), ('克拉玛依市', 195), ('双河市', 148), ('博尔塔拉蒙古自治州', 171), ('可克达拉市', 120), ('伊犁哈萨克自治州', 127), ('昌吉回族自治州', 176), ('石河子市', 157), ('阿克苏地区', 134), ('阿拉尔市', 145), ('巴音郭楞蒙古自治州', 138), ('喀什地区', 200), ('克孜勒苏柯尔克孜自治州', 193), ('图木舒克市', 143), ('铁门关市', 183), ('五家渠市', 127)]
china_city = (
Map()
.add(
series_name=titlename,
data_pair=data_city,
maptype="新疆",
is_map_symbol_show=True, #此处控制在地图上是否显示红点,data_city中有的市名才会在地图中显示红点呦
label_opts=opts.LabelOpts(is_show=True), #此处控制在地图上是否显示名称
)
.set_global_opts(
title_opts=opts.TitleOpts(title=titlename),
visualmap_opts=opts.VisualMapOpts(
min_=0,
max_=15,
is_piecewise=True #定义左下角图例为分段型,默认为连续的图例
),
)
.render(titlename+".html")
)
#执行过后同级会生成一个“新疆GDP.html”文件,后面会用到
二、名称优化
对于名称过长的市,可以在add中增加name_map属性来调整,但是需要注意,修改别名后,对应data_pair中的市名也需要跟别名一致,我这里的别名带上了对应的数值,所以data_city参数也要跟别名一致
from pyecharts.charts import Map # 注意这里与老版本pyecharts调用的区别
from pyecharts import options as opts
import random
titlename = "新疆GDP2"
# 这个给对应的市附上数值
data_city = [('阿克苏:1',1),('阿勒泰:2',2),('巴州:3',3),('博州:4',4),('昌吉:5',5),('哈密:6',6),('和田:7',7),('喀什:8',8),('克拉玛依:9',9),('克州:10',10),('石河子:11',11),('塔城:12',12),('吐鲁番:13',13),('乌鲁木齐:14',14),]
name_map = {
'阿克苏地区':'阿克苏:1','阿勒泰地区':'阿勒泰:2','巴音郭楞蒙古自治州':'巴州:3','博尔塔拉蒙古自治州':'博州:4','昌吉回族自治州':'昌吉:5','哈密市':'哈密:6','和田地区':'和田:7','喀什地区':'喀什:8','克拉玛依市':'克拉玛依:9','克孜勒苏柯尔克孜自治州':'克州:10','石河子市':'石河子:11','塔城地区':'塔城:12','吐鲁番市':'吐鲁番:13','乌鲁木齐市':'乌鲁木齐:14',
'铁门关市':'-','阿拉尔市':'-','图木舒克市':'-','可克达拉市':'-','北屯市':'-','双河市':'-','昆玉市':'-','五家渠市':'-'
}
china_city = (
Map()
.add(
series_name=titlename,
data_pair=data_city,
maptype="新疆",
is_map_symbol_show=False,
label_opts=opts.LabelOpts(is_show=True),
name_map=name_map
)
.set_global_opts(
title_opts=opts.TitleOpts(title=titlename),
visualmap_opts=opts.VisualMapOpts(
min_=0,
max_=15,
is_piecewise=True
),
)
.render(titlename+".html")
)
系不系清凉了许多,继续
三、红点和名字位置调整:
我们选择文档打开方式打开html文件会发现,echarts.min.js和xinjiang.js使用的是在线文档,所以无法变更在线文档的坐标信息来改变红点和名称位置。
新疆的坐标位置保存在xinjiang.js文件中,可以通过everything来找到本地的xinjiang.js文件,打开后会发现每个市前面都会对应一个经纬度坐标,可以通过调整这个坐标来控制图内名称的显示。
将xinjiang.js和html文件放在一起,把html中的xinjiang.js改为本地js文件路径,我这里设置的是同级目录:
展示下修改了坐标之后的图形,是不是又好一点了呢
四、颜色自定义
如果小伙伴觉得颜色不如意也可以自己设置
.set_global_opts(
title_opts=opts.TitleOpts(title=titlename),
visualmap_opts=opts.VisualMapOpts(
pieces=[
{"max": 20, "min": 10, "label": ">10", "color": "#0000CD"},
{"max": 9.99, "min": 9, "label": "9-10", "color": "#0000FF"},
{"max": 8.99, "min": 6, "label": "6-9", "color": "#00BFFF"},
{"max": 5.99, "min": 5, "label": "5-6", "color": "#00BFFF"},
{"max": 4.99, "min": 4, "label": "4-5", "color": "#87CEFA"},
{"max": 3.99, "min": 3, "label": "3-4", "color": "#87CEEB"},
{"max": 2.99, "min": 2, "label": "2-3", "color": "#ADD8E6"},
{"max": 1.99, "min": 1, "label": "1-2", "color": "#B0E0E6"},
{"max": 0.99, "min": 0, "label": "0-1", "color": "#F0F8FF"},
],
is_piecewise=True #这里别写False,不然不是分段型的
),
)
五、拼接
可能小伙伴想要拼接两个省,可以使用多加一个add进行追加,不过产生的图形需要自己挪动进行拼接,这里我也没找到好的方法可以自动生产╮(╯▽╰)╭,有大佬知道求告知啊
这里是可以拖拽的
.add(
series_name=titlename,
data_pair=data_city,
maptype="新疆",
is_map_symbol_show=False,
label_opts=opts.LabelOpts(is_show=True),
name_map=name_map
)
.add(
series_name=titlename,
data_pair=data_city,
maptype="西藏",
is_map_symbol_show=False,
label_opts=opts.LabelOpts(is_show=True),
name_map=name_map
)
六、其他
maptype可以定义多种多样,目前常用的几种有:
1.全球-所有国家: world
2.全国-所有省份:china
3.全国-所有城市:china-cities
4.省/市:省/市名称
希望总结的东西能让大家少走弯路,一起在阳光的大路上越走越远
更多推荐
已为社区贡献1条内容
所有评论(0)