本篇文章为基础性文章,希望对你有所帮助,提供些思路,如果文章中存在错误或不足之处,还请海涵。同时,推荐大家阅读我以前的文章了解基础知识。
前文参考:
【Python数据挖掘课程】一.安装Python及爬虫入门介绍
【Python数据挖掘课程】二.Kmeans聚类数据分析及Anaconda介绍
【Python数据挖掘课程】三.Kmeans聚类代码实现、作业及优化
【Python数据挖掘课程】四.决策树DTC数据分析及鸢尾数据集分析
【Python数据挖掘课程】五.线性回归知识及预测糖尿病实例
【Python数据挖掘课程】六.Numpy、Pandas和Matplotlib包基础知识
【Python数据挖掘课程】七.PCA降维操作及subplot子图绘制
【Python数据挖掘课程】八.关联规则挖掘及Apriori实现购物推荐
【Python数据挖掘课程】九.回归模型LinearRegression简单分析氧化物数据
【python数据挖掘课程】十.Pandas、Matplotlib、PCA绘图实用代码补充
【python数据挖掘课程】十一.Pandas、Matplotlib结合SQL语句可视化分析
【python数据挖掘课程】十二.Pandas、Matplotlib结合SQL语句对比图分析
【python数据挖掘课程】十三.WordCloud词云配置过程及词频分析
【python数据挖掘课程】十四.Scipy调用curve_fit实现曲线拟合
【python数据挖掘课程】十五.Matplotlib调用imshow()函数绘制热图
【python数据挖掘课程】十六.逻辑回归LogisticRegression分析鸢尾花数据
【python数据挖掘课程】十七.社交网络Networkx库分析人物关系(初识篇)
【python数据挖掘课程】十八.线性回归及多项式回归分析四个案例分享
【python数据挖掘课程】十九.鸢尾花数据集可视化、线性回归、决策树花样分析
【python数据挖掘课程】二十.KNN最近邻分类算法分析详解及平衡秤TXT数据集读取
【python数据挖掘课程】二十一.朴素贝叶斯分类器详解及中文文本舆情分析
安装包及代码CSDN下载地址:http://download.csdn.net/download/eastmount/10230303
为何现在不能上传免费资源了,可惜啦!
安装方法作者强推这篇文章: 神农尝百草---Windows环境下为Python3.X安装basemap
这里作者只做简单介绍,我们从非官网网站下载下面两个扩展包,cp27表示Python2.7版本,Windows下64位环境,你需要找到适合自己环境的文件。下载地址为:https://www.lfd.uci.edu/~gohlke/pythonlibs/
cd C:\Software\Program Software\Python\Scripts\basemap
pip install pyproj-1.9.5.1-cp27-cp27m-win_amd64.whl
pip install basemap-1.1.0-cp27-cp27m-win_amd64.whl
安装如下图所示,显示"Successfully installed basemap-1.1.0"表示安装成功。
首先作者给出官方文档的介绍以及简单案例,让读者体会下Basemap的魅力。
官方网址:https://matplotlib.org/basema
介绍
Basemap工具包是Matplotlib包的子包,一个用于在Python绘制2D数据至地图的库,它提供了将坐标转化为25中不同地图投影的功能,然后调用Matplotlib扩展包绘制轮廓、图像和坐标点等。该扩展包提供了海岸线、河流、政治边界数据集以及绘制方法。其中GEOS库在内部用于将海岸线和边界特征剪切到所需的地图投影区域。
示例
下面给出官网的翻译示例,源地址:https://matplotlib.org/basemap/users/geography.html
Basemap包括GSSH(现在是GSHHG)海岸线数据集以及GMT格式的河流、州和国家边界的数据集。这些数据集可以用来以不同的分辨率绘制海岸线、河流和政治边界地图。相关方法如下:
drawcoastlines(): 绘制海岸线。
fillcontinents(): 通过填充海岸线多边形为地图着色。
drawcountries(): 绘制国家边界。
drawstates(): 在北美绘制状态边界。
drawrivers(): 绘制河流。
此外,可以将图像用作地图背景,而不是绘制海岸线和政治边界。Basemap提供了以下几个选项:
drawlsmask(): 绘制高分辨率的海陆图像,指定陆地和海洋的颜色,数据源于GSHHS海岸线。
bluemarble(): 绘制NASA蓝色大理石图像作为地图背景。
shadedrelief(): 绘制阴影浮雕图像作为地图背景。
etopo(): 绘制一张etopo浮雕图像作为地图背景。
warpimage(): 使用abitrary图像作为地图背景,必须是全球新的,从国际日东线向东和南极以北覆盖世界。
1.绘制海岸线、填充海洋和陆地区域
代码
# -*- coding: utf-8 -*-
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
# 设置basemap-Lambert Conformal
m = Basemap(width=12000000,height=9000000,projection='lcc',
resolution='c',lat_1=45.,lat_2=55,lat_0=50,lon_0=-107.)
# 绘制海岸线
m.drawcoastlines()
# 在地图周围绘制边界并填充背景aqua(这个背景最终成为海洋的颜色)
# 将大洲绘制在最上面
m.drawmapboundary(fill_color='aqua')
# 填充大陆coral颜色,并设置湖泊颜色为blue
m.fillcontinents(color='coral',lake_color='blue')
plt.show()
绘制图形如下所示:
# -*- coding: utf-8 -*-
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
# 设置basemap Lambert-Conformal
# 设置分辨率参数resolution=None 跳过处理边界数据集
m = Basemap(width=12000000,height=9000000,projection='lcc',
resolution=None,lat_1=45.,lat_2=55,lat_0=50,lon_0=-107.)
# 为地图背景绘制海陆罩
# lakes=True 意味着内陆湖和海洋颜色一致
m.drawlsmask(land_color='coral',ocean_color='aqua',lakes=True)
plt.show()
绘制如下图所示:3.绘制美国宇航局蓝色大理石图像(the NASA Blue Marble)
代码
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
m = Basemap(width=12000000,height=9000000,projection='lcc',
resolution=None,lat_1=45.,lat_2=55,lat_0=50,lon_0=-107.)
m.bluemarble()
plt.show()
绘制如下图所示:
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
m = Basemap(width=12000000,height=9000000,projection='lcc',
resolution=None,lat_1=45.,lat_2=55,lat_0=50,lon_0=-107.)
m.shadedrelief()
plt.show()
绘制如下图所示:
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
m = Basemap(width=12000000,height=9000000,projection='lcc',
resolution=None,lat_1=45.,lat_2=55,lat_0=50,lon_0=-107.)
m.etopo()
plt.show()
绘制如下图所示:可能读者已经发现了,Basemap扩展包是绘制地图最重要的一个库,所以作者先讲解该库函数。同时,由于作者没有找到系统的参数介绍,只能摸着石头过河学习,也希望对您有点帮助。
为方便呈现,需要将三维球坐标系转换为二维笛卡尔坐标系,利用地图投影(Map Projection)实现。
官网给出的25种映射方式如下:https://matplotlib.org/basemap/users/mapsetup.html
# -*- coding: cp936 -*-
from mpl_toolkits.basemap import Basemap
import numpy as np
import matplotlib.pyplot as plt
width = 28000000; lon_0 = -105; lat_0 = 40
m = Basemap(width=width,height=width,projection='aeqd',
lat_0=lat_0,lon_0=lon_0)
# 填充背景
m.drawmapboundary(fill_color='aqua')
# 绘制海岸线并填充大陆
m.drawcoastlines(linewidth=0.5)
m.fillcontinents(color='coral',lake_color='aqua')
# 20度经纬度,范围-80到81 -180到180
m.drawparallels(np.arange(-80,81,20))
m.drawmeridians(np.arange(-180,180,20))
# 在中心绘制一个黑点
xpt, ypt = m(lon_0, lat_0)
m.plot([xpt],[ypt],'ko')
# 绘制标题
plt.title('Azimuthal Equidistant Projection')
plt.show()
绘制图形如下图所示:
参数介绍如下:
projection=merc':表示规定的投影方法,墨卡托投影(Mercator Projection),广泛应用谷歌地图。
llcrnrlat=-80:所需地图域左下角的纬度(度)Latitude。
urcrnrlat=80:所需地图域的右上角的纬度(度)Latitude。
llcrnrlon=-180:所需地图域左下角的经度(度)Longitude。
urcrnrlon=180:所需地图域(度)的右上角的经度Longitude。
示例:
# -*- coding: utf-8 -*-
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
m = Basemap(projection='merc', llcrnrlat=-80, urcrnrlat=80,
llcrnrlon=-180, urcrnrlon=180)
m.drawcoastlines()
plt.show()
绘制图形如下所示:
# 上海经纬度 (31.23N,121.47E)
x = 31.23
y = 121.47
xpt, ypt = m(x,y)
m.scatter(xpt,ypt,s=2)
x = 31.23
y = 121.47
xpt, ypt = m(x,y)
m.plot([xpt],[ypt],'ko')