1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

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

        共 6839字,需瀏覽 14分鐘

         ·

        2021-03-05 13:47

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

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

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

        pip install plotly

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

        1.注冊郵箱登錄:

        2.依次點擊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ù)詳細位置用python爬蟲爬的,感興趣的可以自己去試一下

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

        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ù)點的位置、顏色和大小多維度地呈現(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]中的任意一種,默認為'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,'經(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」即可進入Python 新手學(xué)習(xí)交流群,一起 100 天計劃!


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

        代碼獲取方式

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


        瀏覽 57
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            免费看操逼视频网站 | 国精产品一区二区三区mba | 女技师三级做爰按摩电影 | 色综合大香蕉 | 久久电影国产 | 女人被狂躁高潮啊的视频在线看 | 欧美日韩精品在线观看 | 被夫上司蹂躏的七天七夜在线观看 | 国产三级乡下 | 四虎视频网站精品久久久一区二区三区 |