最近写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.省/市:省/市名称

 希望总结的东西能让大家少走弯路,一起在阳光的大路上越走越远

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐