tslilove

V1

2022/08/07阅读:61主题:山吹

地图加柱状图、饼图组合可视化

大家好我是亮哥,本期给大家分享地图加柱状图和地图加饼图组合图的制作。一般工作中,使用的比较常见的地图就是热力地图,数据分段地图,很多平台对这种地图的使用是免费的,那如果你需要制作地图加柱状图或者说地图加饼图,那就要实行收费,且网上的资料不是很多,今天我将给大家介绍在html中,接入百度开源的Echarts来制作咱们的高级空间图表


1、效果预览

1.1、全国地图上添加柱状图

这里从Pycharm中,利用谷歌浏览器打开,然后鼠标右键,会出现图片另存为

然后输入图片名,点击保存

在桌面上就保存下来的

结果:

1.2、全国地图上添加饼图

同理

2、工具安装及调用

方式一:利用python

在html文件夹,输入cmd,回车

通过图中命令启动本地服务,输入完命令敲回车

然后在浏览器输入:http://127.0.0.1:8080/,此时网页就会出现你当前文件夹的所有目录及文件

例如:我这里点击全国省份地图+饼图.html

方式二:利用nodejs

下载nodejs,然后安装,安装以后,以管理员身份打开这个命令提示符

输入如下代码,然后回车

npm install http-server -g

安装完成以后,同理方式一的操作,进入到dos窗口,然后输入http-server,回车

随便复制一个到浏览器打开,发现是nodejs开启的服务

方式三:IDE集成环境

如果你安装的有Pycharm或者vscode等集成IDE,可以直接打开

3、省份geojson数据获取

这里推荐使用阿里云的区域位置选择器官网

http://datav.aliyun.com/portal/school/atlas/area_selector

如图,如果不做任何选择,框选位置下载的是全国的位置数据

可以通过点击左边的地图进行下钻,你想要哪一级的数据,进行下载即可

当然,数据很少的时候,我们手动下载即可,需要的数据多了,通过爬虫获取即可

细心的小伙伴可能发现,这里的最小粒度只能到区县级别,那么我们要乡镇的数据该怎么办呢?

这里推荐一款软件 Bigemap GIS Office

下面我们进行示范,可以看到,可以选择到乡镇粒度,点击下载即可


html作图代码关注微信公众号,添加助理微信获取

python读取数据代码:

#!/usr/bin/python
# -*- coding:utf-8 -*-
# @Time    :2022/8/7 1:17
# @Author   : 亮哥
# @微信公众号  : 亮哥数据实验室
# @File      : getMapData.py
# Software  : PyCharm

import json
import pandas as pd

def readExcel():
    df = pd.read_excel("各省份数据.xlsx",sheet_name=0)
    return df
def dealProvince(x: str) -> str:
    if '省' in x:
        x = x.replace('省''')
    elif '市' in x:
        x = x.replace('市''')
    elif '特别行政区' in x:
        x = x.replace('特别行政区''')
    elif '维吾尔自治区' in x:
        x = x.replace('维吾尔自治区''')
    elif '回族自治区' in x:
        x = x.replace('回族自治区''')
    elif '壮族自治区' in x:
        x = x.replace('壮族自治区''')
    elif '自治区' in x:
        x = x.replace('自治区''')
    else:
        x = x
    return x
def readMapJson():
    df = readExcel()
    with open("中华人民共和国.json"'r', encoding='utf-8') as f:
        data = json.loads(f.read())
    json_data = {}
    for dd in data.get('features'):
        d = dd.get('properties')
        json_data[dealProvince(d.get('name'))] = d.get('center')
    provinceJson = {}
    provinceData = []
    for i,j,k in zip(df["省份"],df["类别1"],df["类别2"]):
        province = dealProvince(i)
        if province in json_data:
            provinceJson[province] = json_data[province]
            provinceData.append([province,j,k])
    print(provinceJson)
    print(provinceData)

if __name__ == '__main__':
    readMapJson()

分类:

前端

标签:

工具介绍

作者介绍

tslilove
V1