Python可视化-地图染色

一、数据文件准备

1、value.txt

0,3.19
1,2.7
2,2.51
3,2.78
4,2.61
5,3.13
6,3.14
7,2.69
8,2.51
9,3.15
10,3.15
11,3.15
12,3.15

第一列是称是序号,第二列是其对应数值。

序号与城市对应如下:

0,南京市 
1,徐州市 
2,淮安市
3,盐城市
4,宿迁市
5,泰州市
6,扬州市
7,南通市
8,连云港市 
9,镇江市
10,无锡市
11,苏州市
12,常州市

2、jsmap.svg 下载地址:

https://download.csdn.net/my  (不能0积分我也hen蓝瘦,不过可以复制下面的内容)
















用来生成地图,我采用的示例是江苏省的,只精确到市。

3、染色的颜色信息

推荐一个十六进制的颜色信息网站:http://zh.spycolor.com/

我们设定,数值大的区域使用深色染色,数值小的区域颜色浅。



二、导入模块包

可参考Windows下安装Python、matplotlib包 及相关
https://blog.csdn.net/mikasa3/article/details/78942650 

1、bs4

原名是BeautifulSoup,后经修改。

三、完整代码

如下:

# coding=utf-8
import sys
reload(sys)  
sys.setdefaultencoding('utf8')
import csv
from bs4 import BeautifulSoup
def DrawBlockMap(file_name):
    reader = csv.reader(open(file_name,'r'), delimiter = ",")
    svg = open('jsmap.svg','r').read() #读取江苏省地图数据
    Price = {}
    price_only = []#记录各市的数值
    sort_value = []#记录
    sort_no = []#记录各市的排名
    for row in reader:#遍历读取的文件每一行
        try:
            temp = row[0]#序号
            price = float(row[1].strip())#价格
            Price[temp] = price
            price_only.append(price)
            sort_value.append(price)
        except:
            pass
    sort_value.sort()#对所有数值默认升序排序,计算记录各市的排名
    for i in range(len(price_only)):
        for j in range(len(sort_value)):
            if (price_only[i] == sort_value[j]):
                sort_no.append(j)#记录当前排名
                break
    soup = BeautifulSoup(svg,"lxml")
    paths = soup.findAll('path')
    #颜色列表
    colors = ["#FFD0E7","#FFA0D0","#FF71B8","#FF41A0", "#FF1288", "#E10071", "#B20059", "#720039","#620031","#510029","#410021","#310018","#210010"]
    path_style = 'font-size:12px;fill-rule:nonzero;stroke:#FFFFFF;stroke-opacity:1;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none;stroke-linecap:butt;marker-start:none;stroke-linejoin:bevel;fill:'
    count = 0
    for p in paths:
        try:
            color_class = sort_no[count]#根据排名染不同的颜色,排名越前说明值越小,所以颜色越浅
            count += 1
        except:
            continue
        color = colors[color_class]
        p['style'] = path_style + color#改变地图对应区域的颜色
    print soup.prettify()
if __name__=='__main__':
    DrawBlockMap("value.txt")

四、运行结果

若将文件保存命名为test.py,生成文件名为out_js_map.svg,则在py文件夹中命令行运行,输入:

python test.py > out_js_map.svg

可以右击Python可视化-地图染色_第1张图片在浏览器中打开:

Python可视化-地图染色_第2张图片

如我们所设想的,数值大的区域颜色深,反之则颜色浅。


你可能感兴趣的:(Python,python数据可视化实例入门)