天天看點

python 在地圖上的散點圖-Python交散點地圖

原标題:Python交散點地圖

leftlet給R語言提供了很好用的互動式動态地圖接口,其在Python中得API接口包名為folium(不知道包作者為何這樣起名字,和leaflet已經扯不上關系了),可以滿足我們平時常用的熱力圖、填充地圖、路徑圖、散點标記等高頻可視化場景。

關于folium在熱力圖上的用法,可以參考這一篇分享:

使用Python中的folium包建立熱力密度圖

本篇主要介紹其在point、line、polygon這三個地理資訊場景下得應用:

importpandas aspd

importnumpy asnp

importos

importfolium

fromfolium importplugins

importwebbrowser

importgeopandas asgpPoint:full = pd.read_excel("D:/Python/File/Cities2015.xlsx")

full = full.dropna預設情況下folium.Marker函數用于在空間範圍内标記點,點得樣式是雨滴形狀,但是也可以使用folium.RegularPolygonMarker函數來自定義點樣式:schools_map = folium.Map(location=[full['lat'].mean, full['lon'].mean], zoom_start=10)

marker_cluster = plugins.MarkerCluster.add_to(schools_map)forname,row infull.iterrows:

folium.Marker([row["lat"], row["lon"]], popup="{0}:{1}".format(row["cities"], row["GDP"])).add_to(marker_cluster)

#folium.RegularPolygonMarker([row["lat"], row["lon"]], popup="{0}:{1}".format(row["cities"], row["GDP"]),number_of_sides=10,radius=5).add_to(marker_cluster)

display(schools_map)

#schools_map.save('schools_map.html')

#webbrowser.open('schools_map.html')

display用于在編輯器内展示互動地圖,save方法可以将互動地圖以html檔案得形式儲存至本地磁盤,webbrowser.open方法可以調用預設浏覽器打開本地html格式的互動地圖。

polygon:

因為leaflet使用的線上地圖并不開放位址比對功能,也就意味着我們無法通過直接輸入行政區名稱來擷取行政區劃邊界,是以在制作填充地圖時,仍然需要我們建構本地素材。

mydata = pd.read_csv("D:/R/rstudy/Province/geshengzhibiao.csv", encoding = 'gb18030')

china_map = gp.GeoDataFrame.from_file("D:/R/rstudy/CHN_adm/bou2_4p.shp", encoding = 'gb18030')

#china_map = gp.GeoDataFrame.from_file("D:/R/mapdata/State/china.geojson", encoding = 'gb18030')

China_map = folium.Map(location=[35,120], zoom_start=4)

China_map.choropleth(

geo_data=open('D:/R/mapdata/State/china.geojson',encoding = 'utf-8').read,

data=mydata,

columns=['province', 'zhibiao'],

key_on= 'feature.properties.name',

fill_color='YlGn',

fill_opacity=0.7,

line_opacity=0.2)

display(China_map)

China_map.save("China_map.html")

好在folium的choropleth函數直接支援json格式地圖,僅需提供素材位址即可,data中應該包含與json素材中的屬性表和地理資訊邊界保持一緻得映射表,columns用于指定要用到的字段名稱。key_on用于指定json地圖資料中和你指定得data中對應得連接配接鍵(相當于主鍵)。

fill_color可以指定用于配色的colorBrewer調色闆。

polyline

folium中得線圖制作也較為簡單,僅需提供給folium.PolyLine函數一組帶有嵌套清單或者元組得經緯度點即可。

mydata1 =full.sample(20).loc[:,["lat","lon"]].values.tolist

mydata2 =[(i,j) fori,j infull.sample(20).loc[:,["lat","lon"]].values.tolist]

oneUserMap = folium.Map(location=[40.0764,116.2786],zoom_start=4)

folium.PolyLine(mydata1,color = 'black').add_to(oneUserMap)

display(oneUserMap)

oneUserMap = folium.Map(location=[40.0764,116.2786],zoom_start=4)

folium.PolyLine(mydata2,color = 'black').add_to(oneUserMap)

display(oneUserMap)

稍微增加一些循環條件就可以構造出來實用的路徑圖場景:defmap_fun:

myresult = full.loc[:,["lat","lon","cities","pop"]].values

oneUserMap = folium.Map(location=[40.0764,116.2786],zoom_start=4)

fore inmyresult:

folium.RegularPolygonMarker(

[e[0],e[1]],

popup=str(e[2])+":"+str(e[3]),

fill_color='#769d96',

number_of_sides=10,

radius=10

).add_to(oneUserMap)

others = full.loc[full['cities']!='鄭州市',["lat","lon"]].values.tolist

fori inrange(len(others)):

zhengzhou = full.loc[full['cities']=='鄭州市',["lat","lon"]].values.tolist

zhengzhou.append(others[i])

folium.PolyLine(

locations = zhengzhou,

color = 'black'

).add_to(oneUserMap)

display(oneUserMap)

returnNoneif__name__ == '__main__':

map_fun

https://edu.hellobi.com/course/264傳回搜狐,檢視更多

責任編輯: