得到经纬度数据使用Plotly画世界地图(美赛心得)

1,594 阅读1分钟

因为做到一个题是关于亚马逊的起火问题,需要使用经度维度和其他数据,于是需要针对纬度和经度做一个世界地图可视化,为大家提供一个思路吧

使用plotly的map模块plotly.com/python/maps…可以做许多类型的图,一般都是需要在地图上画点,可以使用px.scatter_mapbox函数,给出一个官方的例子

px.set_mapbox_access_token(open(".mapbox_token").read()) #为了得到读取token的权限
df = px.data.carshare()
fig = px.scatter_mapbox(df, lat="centroid_lat", lon="centroid_lon",     color="peak_hour", size="car_hours",
                  color_continuous_scale=px.colors.cyclical.IceFire, size_max=15, zoom=10)
fig.show()

其中的地图类型有许多种(参考:zhuanlan.zhihu.com/p/87163211) 使用style参数可以改变不同类型的地图

fig.update_layout(mapbox = {'style':'stamen-terrain'},showlegend =True)

在这里插入图片描述 basic类型 在这里插入图片描述 plotly对有经纬度的dataframe类型还是很好画的,如果需要画大致分布的地图,可以使用px.density_mapbox函数,下面是我根据2020年亚太赛画出的一个火灾图,大家可以参考一下,其实plotly官网的教程是很全面的,很多地图都可以看上面的教程画出来

import pandas as pd
import plotly.graph_objects as go
import plotly
import geopandas as gpd
import plotly.express as px


pd.set_option('display.max_columns', 1000)
pd.set_option('display.max_colwidth', 1000)
#draw the  picture of fire
fire = pd.read_csv('fire_archive_M6_168910.csv')  #如果
fire_test = pd.read_csv('fire_nrt_M6_168910.csv')
fire_test['type']=0
fire=pd.concat([fire,fire_test],axis=0)
fire['year'] = fire['acq_date'].apply(lambda x:x[0:7])
year_fire = fire.groupby(['longitude','latitude'])['type'].count()
print(year_fire.sort_values().value_counts())  #发生了火灾的地方还会不会发生 : 不会
fire= fire[fire['type']==0]  #除去异常值
fire['month'] = fire['acq_date'].apply(lambda x:x[0:7])
fire['year'] = fire['acq_date'].apply(lambda x:x[0:4])
fire = fire[fire['year']=='2014']  #找到所有2020的值1
import plotly.express as px
fig=px.density_mapbox(lon=fire.longitude,lat=fire.latitude,z=fire.brightness*5,radius=fire.scan,zoom=1,center=dict(lat=-12.14, lon=-55.078),title='The visualization  of Amazon')  #使用date进行
fig.update_geos(lataxis_showgrid=True, lonaxis_showgrid=True)
fig.update_layout(mapbox_style="stamen-terrain")
fig.update_layout(margin={"r": 0, "t": 0, "l": 0, "b": 0})
fig.show()
fig.write_html('9_month_result_visual.html')

效果图: 3