python繪制高顏值房價與地鐵線路分布圖


前言

本文的文字及圖片來源於網絡,僅供學習、交流使用,不具有任何商業用途,如有問題請及時聯系我們以作處理。

PS:如有需要Python學習資料的小伙伴可以點擊下方鏈接自行獲取

Python免費學習資料、代碼以及交流解答點擊即可加入


 

plotly是python非常強大的可視化庫,畫出的圖不僅精美還數據全面,非常適合拿來畫地圖

今天教大家用plotly庫繪制房價和地鐵線路分布圖,通過本次實例,你能夠掌握地圖標點、划線的基本用法

plotly的安裝比較簡單,直接在命令行輸入:


pip install plotly

然后需要在官網注冊1個token,步驟如下:

1.注冊郵箱登錄:

 

 

2.依次點擊Token-Create a token,下方就會出現token值:

 


pandas讀取房價數據:

import pandas as pd data=pd.read_excel('房價匯總帶經緯度.xlsx') data 

 

房子的經緯度的信息是我根據詳細位置用python爬蟲爬的,感興趣的可以自己去試一下

調用go.Scattermapbox()方法,繪制房價散點圖:

import plotly.graph_objects as go token='pk.eyJ1IjoicHl0aG9uYmlyZCIsImEiOiJja2tqOTBneXcwZTlyMnRzNzczNngzY2huIn0.2dImfhmc06Z8IeX6WeNamQ' fig=go.Figure(go.Scattermapbox( mode="markers", lon=data.經度, lat=data.緯度, hovertext=data.簡介, #懸停顯示文本內容 hoverinfo='text', marker_symbol='marker', marker_size=6)) #標記大小 fig.update_layout(mapbox={ "accesstoken":token, "center":{'lon':116.2,'lat':39.56}, #地圖中心位置 'zoom':11.8}, margin={'l':0,'r':0,'t':0,"b":0} #地圖邊距 ) 

 

go.Scattermapbox()方法提供了多種symbol樣式,網址為:


https://labs.mapbox.com/maki-icons/ 

 

但它只能呈現數據位置,表現的很單一

px.scatter_mapbox()則很好的解決這一問題,能夠將marker的size和color與不同列的值相關聯,通過數據點的位置、顏色和大小多維度地呈現數據(marker的symbol不可改變):

import plotly.express as px import plotly.graph_objects as go fig = px.scatter_mapbox(data, lon = '經度', #輸入經度坐標 lat = '緯度', #輸入緯度 color ="單價", #對應excel的color欄,每個值代表一種顏色 hover_name ="簡介",#可以對應excel里面的某一欄 size_max = 16, #上面size尺寸的最大值 color_continuous_scale = px.colors.carto.Temps ) fig.update_layout(mapbox = {'accesstoken': token, #需要到官網注冊一個token "center":{'lon':116.2,'lat':39.56}, #指定的地圖中心 'zoom': 7.48, 'style': 'dark', #顯示的地圖類型,有遙感地圖,街道地圖等類型 }, margin = {'l': 0, 'r': 0, 't': 0, 'b': 0}) fig.show() #顯示地圖 

 

內置的style可以是[basic, streets, outdoors, light, dark, satellite, satellite-streets]中的任意一種,默認為'light'

最后,我又用爬蟲爬了北京市地鐵站點信息,代碼如下:

import requests import json import pandas as pd url='http://map.amap.com/service/subway?_1599997789354=&srhdata=1100_drw_beijing.json' response=requests.get(url) result=json.loads(response.text) stations=[] lats=[] lons=[] lines=[] for i in result['l']: for j in i['st']: lines.append(i['kn']) stations.append(j['n']) lons.append(j['sl'].split(',')[0]) lats.append(j['sl'].split(',')[1]) dataframe=pd.DataFrame({'站名':stations,'線路':lines,'經度':lons,'緯度':lats}) dataframe 

在第二張圖的基礎上加上地鐵線路圖:

lines=dataframe['線路'].unique().tolist() for line in lines: fig.add_traces(go.Scattermapbox( mode="markers+lines", lon=dataframe.loc[lambda x:x['線路']==line]['經度'], lat=dataframe.loc[lambda x:x['線路']==line]['緯度'], hovertext=dataframe.loc[lambda x:x['線路']==line]['站名'], hoverinfo='text', marker_symbol='marker', marker_size=6, showlegend = False)) for line in lines[1:]: fig.add_traces(go.Scattermapbox( mode="markers+lines", lon=dataframe.loc[lambda x:x['線路']==line]['經度'], lat=dataframe.loc[lambda x:x['線路']==line]['緯度'], hovertext=dataframe.loc[lambda x:x['線路']==line]['站名'], hoverinfo='text', marker_symbol='marker', marker_size=6, showlegend = False)) fig.update_layout(mapbox={"accesstoken":token,"center":{'lon':116.2,'lat':39.56},'zoom':11.8}, margin={'l':0,'r':0,'t':0,"b":0}) 

 

大功告成,你學會了嗎?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM