根据数据生成地图并着色

前言

我们有时会拿到一些数据与国家或者地区密切相关,故在地图上将其可视化会更为直观,同时也会提高数据分析的效率。

利用Map绘制地图(以世界地图为例)

数据形式如下,表中数据是我乱编的。

一.

#导入必要的库
import pandas as pd  
from pyecharts.charts import Map
from pyecharts import options as opts 

#准备数据
data = pd.read_excel("数据.xlsx")
country = list(data["国家"])
number = list(data["数值"])
data_lis=[list(x) for x in zip(country,number)]


c = (
    Map(init_opts=opts.InitOpts(width="1800px", height="1500px"))  #初始化地图大小
    .set_global_opts(
        #title_opts=opts.TitleOpts(title=""),  #根据需要添加适当的标题
        visualmap_opts=opts.VisualMapOpts(
            min_=1,
            max_=158,数据的上下限
            is_piecewise=True, 
            range_text=("High","Low"),
            orient="vertical",
            split_number=8 #将数据区间分为8段
        )
    )
    .add("",data_lis,maptype="world")  #传入数据,地图类型为世界地图,若只需要绘制某一个国家的地图,将world改为对应的国家名即可
    .render("Map.html")
)

上图即是根据数据生成并着色的世界地图,系统将数据自动平均分成了八个数据区间 ,数值越大颜色越深。观察上图我们可以发现,不足的是国家太多,国家名显示在地图上显得非常杂乱。所以我们可以将上述代码修改一下,在

.add("",data_lis,maptype="world")

后面加上

.set_series_opts(
        label_opts=opts.LabelOpts(is_show=False), #去掉国家名
        itemstyle_opts=opts.ItemStyleOpts(color="transparent") #去掉代表国家的小圆点
    )

就可以啦~效果是这样滴

二.

 前面已经提到,数据区间是系统自动平均分配的,但有时候需要我们自定义数据区间该怎么办呢?

import pandas as pd
from pyecharts.charts import Map
from pyecharts import options as opts

data = pd.read_excel("数据.xlsx")
country = list(data["国家"])
number = list(data["数值"])

color_mapping = {
    # 自定义数据分组和颜色
    "[1,17)": "#90C850",
    "[17,34)": "#08b682",
    "[34,50)": "#0f6f5f",
    "[50,63)":"#89c886",
    "[63,82)": "#6AB187",
    "[82,95)": "#FF7F50",
    "[95,116)": "#FF4500",
    "[116,137)": "#FF0000",
    "[137,159)": "#800000",
}

pieces = [
    {"value": 1, "label": "1 to 17", "color": "#90C850"},
    {"value": 2, "label": "17 to 34", "color": "#08b682"},
    {"value": 3, "label": "34 to 50",  "color": "#0f6f5f"},
    {"value": 4, "label": "50 to 63",  "color": "#89c886"},
    {"value": 5, "label": "63 to 82",   "color": "#6AB187"},
    {"value": 6, "label": "82 to 95",   "color": "#FF7F50"},
    {"value": 7, "label": "95 to 116",   "color": "#FF4500"},
    {"value": 8, "label": "116 to 137",   "color": "#FF0000"},
    {"value": 9, "label": "137 to 159",   "color": "#800000"},
]

def classify(number):
    if 1 <= number < 17:
        return 1
    elif 17<= number < 34:
        return 2
    elif 34 <= number < 50:
        return 3
    elif 50 <= number < 63:
        return 4
    elif 63 <= number < 82:
        return 5
    elif 82<= number < 95:
        return 6
    elif 95 <= number < 116:
        return 7
    elif 116 <= number < 137:
        return 8
    elif 137 <= number < 159:
        return 9

data_lis = [[c, classify(n)] for c, n in zip(country, number)]

c = (
    Map(init_opts=opts.InitOpts(width="1800px", height="1200px"))
    .set_global_opts(
        title_opts=opts.TitleOpts(),
        visualmap_opts=opts.VisualMapOpts(
            min_=1,
            max_=159,
            range_text=['High','Low'],
            is_piecewise=True,
            pos_top="middle",
            pos_left="left",
            orient="vertical",
            pieces=pieces
        )
    )
    .add("", data_lis, maptype="world")
    .set_series_opts(
        label_opts=opts.LabelOpts(is_show=False),
        itemstyle_opts=opts.ItemStyleOpts(color="transparent")
    )
    .render("Map.html")
)

上述代码中自定义数据区间后,每个数据区间对应的颜色均为我手动划分,曾尝试过如何给已划分好的数据区间自动分配颜色,但都失败了,欢迎各位大佬补充~

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
线性表 某软件公司大约有30名员工,每名员工有姓名、工号、职务等属性,每年都有员工离职和入职。 把所有员工按照顺序存储结构建立一个线性表,建立离职和入职函数,当有员工离职或入职时,修改线性表,并且打印最新的员工名单。 约瑟夫(Josephus)环问题:编号为1,2,3,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数的上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一人开始重新从1报数,如此下去,直到所有人全部出列为止。 建立n个人的单循环链表存储结构,运行结束后,输出依次出队的人的序号。 栈和队列 某商场有一个100个车位的停车场,当车位未满时,等待的车辆可以进入并计时;当车位已满时,必须有车辆离开,等待的车辆才能进入;当车辆离开时计算停留的的时间,并且按照每小时1元收费。 汽车的输入信息格式可以是(进入/离开,车牌号,进入/离开时间),要求可以随时显示停车场内的车辆信息以及收费历史记录。 某银行营业厅共有6个营业窗口,设有排队系统广播叫号,该银行的业务分为公积金、银行卡、理财卡等三种。公积金业务指定1号窗口,银行卡业务指定2、3、4号窗口,理财卡业务指定5、6号窗口。但如果5、6号窗口全忙,而2、3、4号窗口有空闲时,理财卡业务也可以在空闲的2、3、4号窗口之一办理。 客户领号、业务完成可以作为输入信息,要求可以随时显示6个营业窗口的状态。 5、4阶斐波那契序列如下:f0=f1=f2=0, f3=1,…,fi=fi-1+fi-2+fi-3+fi-4, 利用容量为k=4的循环队列,构造序列的前n+1项(f0, f1 , f2 ,… fn ),要求满足fn ≤200而fn+1 >200。 6、八皇后问题:设8皇后问题的解为 (x1, x2, x3, …,x8), 约束条件为:在8x8的棋盘上,其中任意两个xi 和xj不能位于棋盘的同行、同列及同对角线。要求用一位数组进行存储,输出所有可能的排列。 7、迷宫求解:用二维矩阵表示迷宫,自动生成或者直接输入迷宫的格局,确定迷宫是否能走通,如果能走通,输出行走路线。 8、英国人格思里于1852年提出四色问题(four colour problem,亦称四色猜想),即在为一平面或一球面的地图着色时,假定每一个国家在地图上是一个连通域,并且有相邻边界线的两个国家必须用不同的颜色,问是否只要四种颜色就可完成着色。现在给定一张地图,要求对这张地图上的国家用不超过四种的颜色进行染色。 要求建立地图的邻接矩阵存储结构,输入国家的个数和相邻情况,输出每个国家的颜色代码。 9、以下问题要求统一在一个大程序里解决。 从原四则表达式求得后缀式,后缀表达式求值,从原四则表达式求得中缀表达式,从原四则表达式求得前缀表达式,前缀表达式求值。 数组与广义表 鞍点问题: 若矩阵A中的某一元素A[i,j]是第i行中的最小值,而又是第j列中的最大值,则称A[i,j]是矩阵A中的一个鞍点。写出一个可以确定鞍点位置的程序。 稀疏矩阵转置: 输入稀疏矩阵中每个元素的行号、列号、值,建立稀疏矩阵的三元组存储结构,并将此矩阵转置,显示转置前后的三元组结构。 用头尾链表存储表示法建立广义表,输出广义表,求广义表的表头、广义表的表尾和广义表的深度。 树和二叉树 以下问题要求统一在一个大程序里解决。 按先序遍历的扩展序列建立二叉树的存储结构 二叉树先序、中序、后序遍历的递归算法 二叉树中序遍历的非递归算法 二叉树层次遍历的非递归算法 求二叉树的深度(后序遍历) 建立树的存储结构 求树的深度 图 输入任意的一个网,用普里姆(Prim)算法构造最小生成树。 要求建立图的存储结构(邻接表或邻接矩阵),输入任意的一个图,显示图的深度优先搜索遍历路径。 要求建立图的存储结构(邻接表或邻接矩阵),输入任意的一个图,显示图的广度优先搜索遍历路径。 查找 设计一个读入一串整数构成一颗二叉排序树的程序,从二叉排序树中删除一个结点,使该二叉树仍保持二叉排序树的特性。 24、设定哈希函数 H(key) = key MOD 11 ( 表长=11 ),输入一组关键字序列,根据线性探测再散列解决冲突的方法建立哈希表的存储结构,显示哈希表,任意输入关键字,判断是否在哈希表中。 排序 以下问题要求统一在一个大程序里解决。 25、折半插入排序 26、冒泡排序 27、快速排序 28、简单选择排序 29、归并排序 30、堆排序
好的,首先需要安装pyecharts和地图数据包: ```python !pip install pyecharts==1.9.0 !pip install echarts-countries-pypkg !pip install echarts-china-provinces-pypkg !pip install echarts-china-cities-pypkg !pip install echarts-china-counties-pypkg !pip install echarts-china-misc-pypkg ``` 然后,使用以下代码生成着色地图: ```python from pyecharts import options as opts from pyecharts.charts import Map from pyecharts.faker import Faker # 构造省份-数据字典 data = {"北京": 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, "台湾": 320, "香港": 330, "澳门": 340} # 绘制地图 c = Map() c.add("数据", [list(z) for z in zip(data.keys(), data.values())], "china") c.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) c.set_global_opts(title_opts=opts.TitleOpts(title="中国地图"), visualmap_opts=opts.VisualMapOpts(max_=340, is_piecewise=True, pieces=[{"max": 0, "label": "0", "color": "#FFFFFF"}, {"min": 1, "max": 100, "label": "1-100", "color": "#FFEBCD"}, {"min": 101, "max": 200, "label": "101-200", "color": "#FF6347"}, {"min": 201, "max": 300, "label": "201-300", "color": "#EE2C2C"}, {"min": 301, "label": ">300", "color": "#8B0000"}])) c.render_notebook() ``` 这样就可以在Jupyter Notebook中显示着色地图了。你也可以使用`c.render("map.html")`将地图保存为HTML文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值