首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Basemap:地图绘制神器,让你的数据可视化更上一层楼!

Python里有个宝藏库,叫Basemap。它是Matplotlib的一个“小跟班”,专门用来画地图的。不管你是想搞个世界地图,还是想整个省份地图,它都能帮你搞定。今天咱们就来玩玩这个有意思的工具,看看怎么用它来把枯燥的数据变成漂亮的地图。

1

安装Basemap:踩坑记

要用Basemap,得先装上。这玩意儿安装起来可能有点磨人,我当初就被坑惨了。不过别慌,跟着我的步骤来,保准你能顺利安装: 

pip install basemappip install basemap-data-hires

要是这么装不成,那就得动用conda大法了: 

conda install basemapconda install basemap-data-hires

温馨提示:安装Basemap可能会遇到一些依赖问题,比如GEOS库。如果出现错误,别着急,Google一下错误信息,肯定能找到解决方案。

2

画个世界地图:从“你好,世界”到“你好,地球”

装好Basemap,咱们就从最简单的开始 —— 画个世界地图。 

from mpl_toolkits.basemap import Basemapimport matplotlib.pyplot as plt# 创建一个地图对象m = Basemap(projection='robin', resolution='l', area_thresh=1000.0, lat_0=0, lon_0=0)# 画出海岸线和国界m.drawcoastlines()m.drawcountries()# 填充陆地和海洋颜色m.fillcontinents(color='coral', lake_color='aqua')m.drawmapboundary(fill_color='aqua')# 画出经纬度线m.drawmeridians(np.arange(0, 360, 30))m.drawparallels(np.arange(-90, 90, 30))plt.title(“世界地图”)plt.show()

这段代码会给你画出一个漂亮的世界地图。projection='robin'是罗宾森投影,这种投影能在保持面积的尽量减少形状的扭曲。resolution='l'表示低分辨率,够咱们用了。要是想要更清晰的地图,可以改成'i'或者'h',不过加载速度会慢一些。

3

在地图上标记位置:给地图加点料

光有地图还不够劲儿,咱们得在上面标记些有意思的地方。比如,咱们来标记几个著名的旅游景点: 

# 接上面的代码# 定义一些地点的经纬度places = {    '埃菲尔铁塔':(48.8584, 2.2945),    '泰姬陵':(27.1750, 78.0422),    '长城':(40.4319, 116.5704),    '自由女神像':(40.6892, -74.0445)}# 在地图上标记这些地点for name, coords in places.items():    x, y = m(coords[1], coords[0])    plt.plot(x, y, 'ro', markersize=10)    plt.text(x, y, name, fontsize=12, fontweight='bold', ha='right', va='bottom')plt.show()

这下地图上就多了几个红点,每个红点旁边还有地名标注。是不是感觉地图一下子活了起来?

4

画热力图:让数据“发烧”

假设咱们有一堆城市的温度数据,想在地图上直观地展示出来。Basemap配合Matplotlib,分分钟就能搞定一个漂亮的热力图: 

import numpy as np# 假设我们有一些随机的温度数据lats = np.random.uniform(20, 50, 50)lons = np.random.uniform(-130, -60, 50)temps = np.random.uniform(0, 30, 50)# 创建北美地图m = Basemap(llcrnrlon=-130, llcrnrlat=20, urcrnrlon=-60, urcrnrlat=50,            projection='lcc', lat_1=33, lat_2=45, lon_0=-95)# 画出基本地图m.drawcoastlines()m.drawcountries()m.drawstates()# 将经纬度转换为地图坐标x, y = m(lons, lats)# 画出热力图plt.scatter(x, y, c=temps, s=20, cmap='hot', alpha=0.7)plt.colorbar(label='温度 (°C)')plt.title('北美温度分布')plt.show()

这段代码会给你画出一个北美洲的温度分布图。颜色越红,温度越高。是不是比看一堆数字直观多了?

5

自定义地图样式:让你的地图与众不同

Basemap提供了很多自定义选项,你可以调整地图的颜色、线条样式等等。来看看怎么把地图搞得更有格调: 

m = Basemap(projection='mill', llcrnrlat=-60, urcrnrlat=90, llcrnrlon=-180, urcrnrlon=180, resolution='c')m.drawcoastlines(color='#555555', linewidth=0.5)m.fillcontinents(color='#FFDDCC', lake_color='#DDEEFF')m.drawcountries(color='#555555', linewidth=0.25)m.drawmeridians(np.arange(0, 360, 30), color='#888888', dashes=[1, 0], linewidth=0.25, labels=[0,0,0,1])m.drawparallels(np.arange(-90, 90, 30), color='#888888', dashes=[1, 0], linewidth=0.25, labels=[1,0,0,0])plt.title('世界地图:粉嫩风格', fontsize=16)plt.show()

这段代码会给你一个颜色柔和的世界地图,看起来就像是用彩色铅笔画出来的。你可以随意调整颜色和线条样式,创造出属于你自己的地图风格。

好了,今天的Basemap之旅就到这里。有了这些基础,你已经可以画出各种有趣的地图了。地图可视化的世界很大,希望这篇文章能帮你打开这扇门。记住,编程就像画画,多练多尝试,你会发现更多有趣的玩法。Basemap虽然强大,但也有它的小脾气,用的时候难免会遇到些坑。别怕,遇到问题就去查,去试,慢慢你就会发现,原来地图可视化这么好玩!

  • 发表于:
  • 原文链接https://page.om.qq.com/page/ONlj0cqgQZVD2GVuYOJR85sw0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券