Python可视化-地图染色

一、数据文件准备
1、value.txt
0,3.191,2.72,2.513,2.784,2.615,3.136,3.147,2.698,2.519,3.1510,3.1511,3.1512,3.15
第一列是称是序号,第二列是其对应数值 。
序号与城市对应如下:
0,南京市 1,徐州市 2,淮安市3,盐城市4,宿迁市5,泰州市6,扬州市7,南通市8,连云港市 9,镇江市10,无锡市11,苏州市12,常州市
2、jsmap.svg 下载地址:
(不能0积分我也hen蓝瘦,不过可以复制下面的内容)
【Python可视化-地图染色】
用来生成地图,我采用的示例是江苏省的,只精确到市 。
3、染色的颜色信息
推荐一个十六进制的颜色信息网站:
我们设定,数值大的区域使用深色染色,数值小的区域颜色浅 。

Python可视化-地图染色

文章插图
二、导入模块包
可参考下安装、包 及相关
1、bs4
原名是,后经修改 。
三、完整代码
Python可视化-地图染色

文章插图
如下:
# coding=utf-8import sysreload(sys)sys.setdefaultencoding('utf8')import csvfrom bs4 import BeautifulSoupdef DrawBlockMap(file_name):reader = csv.reader(open(file_name,'r'), delimiter = ",")svg = open('jsmap.svg','r').read() #读取江苏省地图数据Price = {}price_only = []#记录各市的数值sort_value = http://www.kingceram.com/post/[]#记录sort_no = []#记录各市的排名for row in reader:#遍历读取的文件每一行try:temp = row[0]#序号price = float(row[1].strip())#价格Price[temp] = priceprice_only.append(price)sort_value.append(price)except:passsort_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)#记录当前排名breaksoup = 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 = 0for p in paths:try:color_class = sort_no[count]#根据排名染不同的颜色,排名越前说明值越小,所以颜色越浅count += 1except:continuecolor = colors[color_class]p['style'] = path_style + color#改变地图对应区域的颜色print soup.prettify()if __name__=='__main__':DrawBlockMap("value.txt")
四、运行结果
若将文件保存命名为test.py,生成文件名为.svg,则在py文件夹中命令行运行,输入:
python test.py > out_js_map.svg
可以右击
Python可视化-地图染色

文章插图
在浏览器中打开:
Python可视化-地图染色

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