python绘制高颜值房价与地铁线路分布图

前言javascript

本文的文字及图片来源于网络,仅供学习、交流使用,不具备任何商业用途,若有问题请及时联系咱们以做处理。java

PS:若有须要Python学习资料的小伙伴能够点击下方连接自行获取python

Python免费学习资料、代码以及交流解答点击便可加入express


 

plotly是python很是强大的可视化库,画出的图不只精美还数据全面,很是适合拿来画地图json

今天教你们用plotly库绘制房价和地铁线路分布图,经过本次实例,你可以掌握地图标点、划线的基本用法网络

plotly的安装比较简单,直接在命令行输入:app

pip install plotly

而后须要在官网注册1个token,步骤以下:python爬虫

1.注册邮箱登陆:学习

 

 

2.依次点击Token-Create a token,下方就会出现token值:url

 


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}) 

 

大功告成,你学会了吗?

相关文章
相关标签/搜索