Python常用的6种绘制地图的方法

您所在的位置:网站首页 手绘学校地图绘制方法 Python常用的6种绘制地图的方法

Python常用的6种绘制地图的方法

2024-07-06 20:51| 来源: 网络整理| 查看: 265

今天来讲一讲在日常工作生活中我常用的几种绘制地图的方法,下面我将介绍下面这些可视化库的地图绘制方法,当然绘制漂亮的可视化地图还有很多优秀的类库,没有办法一一列举

pyecharts、plotly、folium、bokeh、basemap、geopandas、cartopy

Boken

首先我们先介绍 Boken 绘制地图的方法

Bokeh 支持创建基本地图可视化和基于处理地理数据的地图可视化

画一张世界地图

代码语言:javascript复制from bokeh.plotting import figure, show from bokeh.tile_providers import CARTODBPOSITRON, get_provider from bokeh.io import output_notebook output_notebook() tile_provider = get_provider(CARTODBPOSITRON) p = figure(x_range=(-2000000, 6000000), y_range=(-1000000, 7000000),            x_axis_type="mercator", y_axis_type="mercator") p.add_tile(tile_provider) show(p)图片图片

再画一张中国地图看看

代码语言:javascript复制from bokeh.plotting import curdoc, figure from bokeh.models import GeoJSONDataSource from bokeh.io import show # 读入中国地图数据并传给GeoJSONDataSource with open("china.json", encoding="utf8") as f:     geo_source = GeoJSONDataSource(geojson=f.read()) # 设置一张画布 p = figure(width=500, height=500) # 使用patches函数以及geo_source绘制地图 p.patches(xs='xs', ys='ys', source=geo_source) show(p)图片图片

我们通过 GEO 地理数据来绘制地图同样非常方便,但是地图看起来有一些单调,我们把不同的省份绘制成不同的颜色来看看

代码语言:javascript复制with open("china.json", encoding="utf8") as f:     data = json.loads(f.read()) # 判断是不是  北京地区数据 def isBeijing(district):     if 'beijing' in district['properties']['woe-name'].lower():         return True     return False # data['features'] = list(filter(isInLondon, data['features'])) # 过滤数据 # 为每一个地区增加一个color属性 for i in range(len(data['features'])):     data['features'][i]['properties']['color'] = ['red', 'blue', 'yellow', 'orange', 'gray', 'purple'][i % 6]     data['features'][i]['properties']['number'] = random.randint(0, 20_000) geo_source = GeoJSONDataSource(geojson=json.dumps(data)) p = figure(width=500, height=500, tooltips="@name, number: @number") p.patches(xs='xs', ys='ys', fill_alpha=0.7,         line_color='white',         line_width=0.5,         color="color",   # 增加颜色属性,这里的"color"对应每个地区的color属性         source=geo_source) p.axis.axis_label = None p.axis.visible = False p.grid.grid_line_color = None show(p)图片图片

可以看到已经有内味了,唯一美中不足的就是南海的十三段线没有展示出来

geopandas

GeoPandas 是基于 Pandas 的地图可视化工具,其数据结构完全继承自 Pandas,对于熟悉潘大师的同学来说还是非常友好的

还是先画一张世界地图

代码语言:javascript复制import pandas as pd import geopandas import matplotlib.pyplot as plt %matplotlib inline world = geopandas.read_file(geopandas.datasets.get_path('naturalearth_lowres')) world.plot() plt.show()图片图片

这也是 geopandas 官网上的经典图片,可以看到非常简单,除去 import 代码,仅仅三行,就完成了地图的绘制

下面我们继续绘制中国地图,这次我们加上九段线信息

代码语言:javascript复制china_nine = geopandas.read_file(r"geojson/九段线GS(2019)1719号.geojson") china = geopandas.read_file('china-new.json') fig, ax = plt.subplots(figsize=(12, 8),dpi=80) ax = china.plot(ax=ax, column='number') ax = china_nine.plot(ax=ax) plt.show()图片图片

我们复用了前面处理的 china.json 数据,里面的 number 字段是随机生成的测试数据,效果与 Bokeh 不相上下

plotly

接下来我们介绍 plotly,这也是一个非常好用的 Python 可视化工具,如果要绘制地图信息,我们需要安装如下依赖

代码语言:javascript复制!pip install geopandas==0.3.0 !pip install pyshp==1.2.10 !pip install shapely==1.6.3

接下来我们先绘制一个世界地图

代码语言:javascript复制import plotly.graph_objects as go fig = go.Figure(go.Scattermapbox(     mode = "markers+lines",     lon = [10, 20, 30],     lat = [10, 20,30],     marker = {'size': 10})) fig.add_trace(go.Scattermapbox(     mode = "markers+lines",     lon = [-50, -60,40],     lat = [30, 10, -20],     marker = {'size': 10})) fig.update_layout(     margin ={'l':0,'t':0,'b':0,'r':0},     mapbox = {         'center': {'lon': 113.65000, 'lat': 34.76667},         'style': "stamen-terrain",         'center': {'lon': -20, 'lat': -20},         'zoom': 1}) fig.show()

这里我们使用底层 API plotly.graph_objects.Choroplethmapbox 来绘制

图片图片

下面我们继续绘制中国地图,使用一个高级 API plotly.express.choropleth_mapbox



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3