<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 6839字,需瀏覽 14分鐘

           ·

          2021-03-05 13:47

          plotly是python非常強(qiáng)大的可視化庫,畫出的圖不僅精美還數(shù)據(jù)全面,非常適合拿來畫地圖

          今天教大家用plotly庫繪制房價和地鐵線路分布圖,通過本次實例,你能夠掌握地圖標(biāo)點(diǎn)、劃線的基本用法

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

          pip install plotly

          然后需要在官網(wǎng)注冊1個token,步驟如下:

          1.注冊郵箱登錄:

          2.依次點(diǎn)擊Token-Create a token,下方就會出現(xiàn)token值:

          pandas讀取房價數(shù)據(jù):

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

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

          調(diào)用go.Scattermapbox()方法,繪制房價散點(diǎn)圖:

          import plotly.graph_objects as go
          token='pk.eyJ1IjoicHl0aG9uYmlyZCIsImEiOiJja2tqOTBneXcwZTlyMnRzNzczNngzY2huIn0.2dImfhmc06Z8IeX6WeNamQ'
          fig=go.Figure(go.Scattermapbox(
              mode="markers",
              lon=data.經(jīng)度,
              lat=data.緯度,
              hovertext=data.簡介,  #懸停顯示文本內(nèi)容
              hoverinfo='text',
              marker_symbol='marker',
              marker_size=6))       #標(biāo)記大小
          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樣式,網(wǎng)址為:

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

          但它只能呈現(xiàn)數(shù)據(jù)位置,表現(xiàn)的很單一

          px.scatter_mapbox()則很好的解決這一問題,能夠?qū)arker的size和color與不同列的值相關(guān)聯(lián),通過數(shù)據(jù)點(diǎn)的位置、顏色和大小多維度地呈現(xiàn)數(shù)據(jù)(marker的symbol不可改變):

          import plotly.express as px
          import plotly.graph_objects as go
          fig = px.scatter_mapbox(data,
                                  lon = '經(jīng)度',  #輸入經(jīng)度坐標(biāo)
                                  lat = '緯度',  #輸入緯度
                                  color ="單價"#對應(yīng)excel的color欄,每個值代表一種顏色
                                  hover_name ="簡介",#可以對應(yīng)excel里面的某一欄
                                  size_max = 16#上面size尺寸的最大值
                                  color_continuous_scale = px.colors.carto.Temps
                                 )

          fig.update_layout(mapbox = {'accesstoken': token, #需要到官網(wǎng)注冊一個token
                                      "center":{'lon':116.2,'lat':39.56},  #指定的地圖中心
                                      'zoom'7.48,
                                      'style''dark'#顯示的地圖類型,有遙感地圖,街道地圖等類型
                                     },
                            margin = {'l'0'r'0't'0'b'0})
          fig.show() #顯示地圖

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

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

          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,'經(jīng)度':lons,'緯度':lats})
          dataframe

          在第二張圖的基礎(chǔ)上加上地鐵線路圖:

          lines=dataframe['線路'].unique().tolist()
          for line in lines:
              fig.add_traces(go.Scattermapbox(
                  mode="markers+lines",
                  lon=dataframe.loc[lambda x:x['線路']==line]['經(jīng)度'],
                  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]['經(jīng)度'],
                  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})

          大功告成,你學(xué)會了嗎?


          PS公號內(nèi)回復(fù)「Python」即可進(jìn)入Python 新手學(xué)習(xí)交流群,一起 100 天計劃!


          老規(guī)矩,兄弟們還記得么,右下角的 “在看” 點(diǎn)一下,如果感覺文章內(nèi)容不錯的話,記得分享朋友圈讓更多的人知道!

          代碼獲取方式

          識別文末二維碼,回復(fù):210305


          瀏覽 57
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产足交免费看 | 一起草成人视频 | 日韩黄色电影网址网站 | 俺去操逼 | 丁香色播五月 |