python地图实例_Python地图可视化-Folium实例(二)

继续上一篇,继续来看看folium的使用。可视化标记

folium中的弹窗(popup)是支持HTML标签的,比如,我们可以把上一篇的popup,增加下HTML标签

folium.Marker([31.2453,121.4857], popup=parse_zhch('

外白渡桥

'), tooltip=tooltip).add_to(m)

我们再点击的话,就变成了这样子

folium本身就支持Vincent和altair,所以可以直接实现一些可视化效果。

这是官方例子中提供的数据,先用一下,其实这里的思想就是JSON来存储可视化需要的各种信息,最后渲染出来,后面会看看这个altair的使用。

import os

import json

import requests

url = 'https://raw.githubusercontent.com/python-visualization/folium/master/examples/data'

vis1 = json.loads(requests.get(f'{url}/vis1.json').text)

vis2 = json.loads(requests.get(f'{url}/vis2.json').text)

vis3 = json.loads(requests.get(f'{url}/vis3.json').text)

这里的vis1、vis2、vis3就是格式+数据

然后,我们加入到popup中去

## 初始化地图,指定上海市

m = folium.Map(

location=[31.2389, 121.4992],

zoom_start=14

)

# 悬浮弹出信息

tooltip = parse_zhch('嘿!')

# 添加marker到地图

folium.Marker(

location=[31.2453,121.4857],

popup=folium.Popup(max_width=450).add_child(

folium.Vega(vis1,width=450,height=250)

)

).add_to(m)

folium.Marker(

location=[31.2418,121.4953],

popup=folium.Popup(max_width=450).add_child(

folium.Vega(vis2,width=450,height=250)

)

).add_to(m)

m

这时,再点击坐标点的时候,就会显示一个数据图表,很有意思的。

后面研究这个这个altar

2. GeoJSON/TopoJSON

这个是重庆的数据,我们看看是啥效果

url = 'https://a.amap.com/jsapi_demos/static/geojson/chongqing.json'

## 初始化地图,指定上海市

m = folium.Map(

location=[31.2389, 121.4992],

zoom_start=14

)

# 添加marker到地图

folium.GeoJson(

url,

name='geojson'

).add_to(m)

m

上面的定位还是上海,我们先手动拖到重庆区看看哦

大概是可以实现这样子的效果的

找了下,没有上海的,找了几个都不行,暂时不知道为啥,但是发现一个网站,可以手动绘制图层,生成GeoJson格式数据:http://geojson.io/

把json数据保存到本地就可以使用了

## 初始化地图,指定上海市

m = folium.Map(

location=[31.2389, 121.4992],

zoom_start=14

)

# 添加marker到地图

folium.GeoJson(

# 文件名(路径)

'shanghai.json',

name='geojson'

).add_to(m)

m

附上GeoJson数据:

{

"type": "FeatureCollection",

"features": [

{

"type": "Feature",

"properties": {},

"geometry": {

"type": "Polygon",

"coordinates": [

[

[

118.17066192626953,

36.16005298551354

],

[

118.17649841308594,

36.08545365845406

],

[

118.2290267944336,

36.110697795643894

],

[

118.17066192626953,

36.16005298551354

]

]

]

}

},

{

"type": "Feature",

"properties": {

"stroke": "#555555",

"stroke-width": 2,

"stroke-opacity": 1,

"fill": "#00ff00",

"fill-opacity": 0.5

},

"geometry": {

"type": "Polygon",

"coordinates": [

[

[

121.4754867553711,

31.231298103688736

],

[

121.50664329528807,

31.231298103688736

],

[

121.50664329528807,

31.254046947601545

],

[

121.4754867553711,

31.254046947601545

],

[

121.4754867553711,

31.231298103688736

]

]

]

}

}

]

}

这里得研究一下GeoJson的格式,还会有更多的效果,比如,我这次,圈了2个位置出来,然后增加了一个属性“id”

{

"type": "FeatureCollection",

"features": [

{

"type": "Feature",

"id":"one",

"properties": {},

"geometry": {

"type": "Polygon",

"coordinates": [

[

[

121.46947860717773,

31.232545762927465

],

[

121.47583007812501,

31.232545762927465

],

[

121.47583007812501,

31.23944428718776

],

[

121.46947860717773,

31.23944428718776

],

[

121.46947860717773,

31.232545762927465

]

]

]

}

},

{

"type": "Feature",

"id":"two",

"properties": {},

"geometry": {

"type": "Polygon",

"coordinates": [

[

[

121.48063659667969,

31.235701533345093

],

[

121.49428367614746,

31.235701533345093

],

[

121.49428367614746,

31.239077357092913

],

[

121.48063659667969,

31.239077357092913

],

[

121.48063659667969,

31.235701533345093

]

]

]

}

}

]

}

然后,代码修改一下

## 初始化地图,指定上海市

m = folium.Map(

location=[31.2389, 121.4992],

zoom_start=14

)

style_function = lambda x: {'fillColor': '#0000ff' if

x['id']=='one' else

'#00ff00'}

# 添加marker到地图

folium.GeoJson(

# 文件名(路径)

'shanghai.json',

name='geojson',

style_function=style_function

).add_to(m)

m

3.Choropleth maps

这个也很好用,官方的效果图很好看

但是这个需要有GeoJson地理位置数据和相应的值对应起来,我就简单试了个例子

还是用的上面那个GeoJson

state_data = pd.DataFrame({'id': ['one', 'two'], 'gmv': [100,200]})

## 初始化地图,指定上海市

m = folium.Map(

location=[31.2389, 121.4992],

zoom_start=14

)

folium.Choropleth(

# GeoJson

geo_data='shanghai.json',

name='choropleth',

data=state_data,

columns=['id', 'gmv'],

key_on='feature.id',

fill_color='YlGn',

fill_opacity=0.7,

line_opacity=0.2,

legend_name='Unemployment Rate (%)'

).add_to(m)

folium.LayerControl().add_to(m)

m

效果是出来了,就是不太好看呢

好了,这一篇,也先到这里,后面在看看官方的例子,继续更新。

你可能感兴趣的:(python地图实例)