文章转自:http://blog.csdn.net/ouening/article/details/55227364

使用folium实现中国地图绘制,文章链接:

python/folium绘制中国人口数量热力图(HeatMap)


今天发现另一个软件库folium可以实现对openstreetmap的调用,参考链接http://blog.csdn.net/qq_14906811/article/details/74906275 ,下面是操作步骤:


  • 下载2015Cities-CHINA.xlsx ,包含中国各城市的经纬度,人口数量,GDP,自己网上搜索整理,数据可能过时了,和维基百科查到的数据不太对,但是拿来写个小程序还是足够的)
  • 安装folium

pip3 install folium

  • 代码实现
# -*- coding: utf-8 -*-
"""
Created on Sat Dec 23 20:19:47 2017@author: 周文青
"""import numpy as np
import pandas as pd
import seaborn as sns
import folium
import webbrowser
from folium.plugins import HeatMap
# posi=pd.read_csv("D:\\Files\\datasets\\CitiesLatLon_China.csv")posi=pd.read_excel("2015Cities-CHINA.xlsx")num = 10lat = np.array(posi["lat"][0:num])                        # 获取维度之维度值
lon = np.array(posi["lon"][0:num])                        # 获取经度值
pop = np.array(posi["pop"][0:num],dtype=float)    # 获取人口数,转化为numpy浮点型
gdp = np.array(posi["GDP"][0:num],dtype=float)    # 获取人口数,转化为numpy浮点型data1 = [[lat[i],lon[i],pop[i]] for i in range(num)]    #将数据制作成[lats,lons,weights]的形式map_osm = folium.Map(location=[35,110],zoom_start=5)    #绘制Map,开始缩放程度是5倍
HeatMap(data1).add_to(map_osm)  # 将热力图添加到前面建立的map里file_path = r"D:\Files\python\地图\人口.html"
map_osm.save(file_path)     # 保存为html文件webbrowser.open(file_path)  # 默认浏览器打开
  • 结果: 

这篇博文主要实现用Pyhon,Matplotlib/Basemap绘制中国地图,主要是各省份行政图(轮廓图),地形图和人口分布图,其中人口分布可以嵌入到上述图形中。

参考链接: 
(1)https://www.zhihu.com/question/49669755 
(2)http://basemaptutorial.readthedocs.io/en/latest/backgrounds.html#fillcontinents

1、数据准备: 
(1)到http://www.gadm.org/download 下载中国shapefile格式的资料,有读者反应进去不了该网站,可以在我的github下下载https://github.com/ouening/python-code/tree/master/resources下载后的文件名为CHN_adm_shp.zip ,解压后如图: 
 
主要用到的文件是CHN_adm1.shp,另外CHM_adm1.csv 可以用notepad打开查看一下文件内容

(2)2015Cities-CHINA.xlsx ,包含中国各城市的经纬度,自己网上搜索整理,数据可能过时了,和维基百科查到的数据不太对,但是拿来写个小程序还是足够的) 
xlsx可以用excel打开查看一下: 
 
在python中可以导入pandas模块,使用read_excel() 函数方便读取文件

basemap绘图常用函数: 
 
basemap地图背景设置函数: 

更多详细的函数介绍请参考

http://matplotlib.org/basemap/users/geography.html

程序1,各省份轮廓图

import timestart = time.clock()from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
fig = plt.figure()
ax1 = fig.add_axes([0.1,0.1,0.8,0.8])map = Basemap(llcrnrlon=80.33, llcrnrlat=3.01, urcrnrlon=138.16, urcrnrlat=56.123,resolution='h', projection='cass', lat_0 = 42.5,lon_0=120,ax=ax1)shp_info = map.readshapefile("D:\\GoogleDownload\\CHN_adm_shp\\CHN_adm1",'states',drawbounds=True) # CHN_adm1的数据是中国各省区域for info, shp in zip(map.states_info, map.states):proid = info['NAME_1']  # 可以用notepad打开CHN_adm1.csv文件,可以知道'NAME_1'代表各省的名称if proid == 'Guangdong':poly = Polygon(shp,facecolor='g',edgecolor='c', lw=3) # 绘制广东省区域ax1.add_patch(poly)map.shadedrelief() # 绘制阴暗的浮雕图map.drawcoastlines()
end=time.clock()
print(end-start)
plt.show()

程序2,地形图

import timestart = time.clock()
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
import pandas as pd
import numpy as np
posi=pd.read_excel("D:\\Files\\datasets\\2015Cities-CHINA.xlsx") #读取中国城市数据
lat = np.array(posi["lat"][0:120])                        # 获取维度之维度值
lon = np.array(posi["lon"][0:120])                        # 获取经度值
pop = np.array(posi["pop"][0:120],dtype=float)
size=(pop/np.max(pop))*100  map = Basemap(llcrnrlon=80.33,
              llcrnrlat=3.01,
              urcrnrlon=138.16,
              urcrnrlat=56.123,
             resolution='h', projection='cass', lat_0 = 42.5,lon_0=120)map.readshapefile("D:\\GoogleDownload\\CHN_adm_shp\\CHN_adm1",'states',drawbounds=True)map.etopo() # 绘制地形图,浮雕样式map.drawcoastlines()x,y = map(lon[2],lat[2]) # 北京市坐标,经纬度坐标转换为该map的坐标a,b = map(lon,lat)# map.scatter(a,b,s=size) # 取消注释此行即可获得中国各地区人口分布示意图map.scatter(x,y,s=200,marker='*',facecolors='r',edgecolors='r') # 绘制首都end=time.clock()print(end-start)plt.show()

程序3,人口分布图


import urllib
import numpy as np
import matplotlib
matplotlib.rcParams['toolbar'] = 'None'
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
from  matplotlib.animation import FuncAnimation
import pandas as pd
import seaborn as sns# posi=pd.read_csv("D:\\Files\\datasets\\CitiesLatLon_China.csv")posi=pd.read_excel("D:\\Files\\datasets\\2015Cities-CHINA.xlsx")lat = np.array(posi["lat"][0:120])                        # 获取维度之维度值
lon = np.array(posi["lon"][0:120])                        # 获取经度值
pop = np.array(posi["pop"][0:120],dtype=float)    # 获取人口数,转化为numpy浮点型
gdp = np.array(posi["GDP"][0:120],dtype=float)    # 获取人口数,转化为numpy浮点型size=(pop/np.max(pop))*100    # 绘制散点图时图形的大小,如果之前pop不转换为浮点型会没有大小不一的效果# size=(gdp/np.max(gdp))*100    # 绘制散点图时图形的大小,如果之前pop不转换为浮点型会没有大小不一的效果map = Basemap(projection='stere',
              lat_0=35, lon_0=110,
              llcrnrlon=82.33,
              llcrnrlat=3.01,
              urcrnrlon=138.16,
              urcrnrlat=53.123,resolution='l',area_thresh=10000,rsphere=6371200.)map.drawcoastlines()
map.drawcountries()
map.drawcounties()
map.readshapefile("D:\\GoogleDownload\\CHN_adm_shp\\CHN_adm1",'states',drawbounds=True)
map.drawmapboundary()parallels = np.arange(0.,90,10.)
map.drawparallels(parallels,labels=[1,0,0,0],fontsize=10) # 绘制纬线meridians = np.arange(80.,140.,10.)
map.drawmeridians(meridians,labels=[0,0,0,1],fontsize=10) # 绘制经线x,y = map(lon,lat)# map.scatter(x,y,edgecolors='r',facecolors='r',marker='*',s=320)map.scatter(x,y,s=size)plt.title("Population Distribution in China")
plt.show()

Basemap绘制地图相关推荐

  1. 第4章【思考与练习2】数据文件high-speed rail.csv存放着世界各国高速铁路的情况。对世界各国高铁的数据进行绘图分析。使用Basemap绘制地图及使用Pyecharts绘制地图。

    目录 P84思考与练习2 方法一:使用Basemap绘制地图 方法二:使用Pyecharts绘制地图 P84思考与练习2 1.叙述各类图形的特点.适合展示的数据特性,以及在数据探索阶段的用途. 函数绘 ...

  2. 【Python实用工具】速来!!一篇文章十分钟教你如何使用Python第三方库basemap进行地图绘制

    basemap地图绘制 basemap地图绘制 1 basemap的使用 1.1 basemap安装 1.2 basemap使用 1.3 缩放区域与绘图 2 basemap综合示例 2.1 美国人口分 ...

  3. Cartopy绘制地图

      之前有想过用Basemap绘制地图,后来在查阅Basemap的说明文件的时候发现Basemap已经停止维护了,神特么停止维护,这该死可爱的不向下兼容的版本切换啊,为啥这么说呢,因为Basemap是 ...

  4. python采用Basemap绘制完美中国地图(包括绘制边界框,随机点等)

    python采用Basemap绘制完美中国地图(包括绘制边界框,随机点等) 1. 效果图 2. 原理 2.1 依赖模块及安装 2.2 工程目录 2.3 依赖文件latlng.txt 经纬度 3 源码 ...

  5. Basemap库绘制地图

    Basemap 学习 api手册 https://matplotlib.org/basemap/api/basemap_api.html 安装basemap库 首先安装geos库 pip instal ...

  6. Basemap绘制中国地图

    2022.06.02更新 CHN_adm_shp.zip 网盘下载链接: 链接:https://pan.baidu.com/s/11igf-bfDLuolI5HzEykzMw 提取码:oas6 201 ...

  7. python采用Basemap绘制完美中国地图

    python采用Basemap绘制完美中国地图 摘要 Basemap的安装 下载Basemap安装文件 安装 Pyproj& Basemap Basemap的Helloword 使用Shape ...

  8. Python之使用Basemap绘制中国地图

    目录 1.下载Basemap 2.安装Basemap 3.参数说明 4.地图包下载及导入 5.颜色填充 1.下载Basemap 本人电脑win7,64位操作系统,使用Jupyter 和 Python3 ...

  9. python用cartopy包画地图_python绘制地图的利器Cartopy使用说明

    python绘制地图一般使用Basemap绘图包,但该包配置相对较繁琐,自定义性不强,这里介绍一个绘制地图的利器Cartopy,个人认为该工具方便.快捷,附上一些自己写的程序. 准备工作,工欲善其事, ...

最新文章

  1. 利用OpenGL渲染并用OpenCV输出显示二维图像
  2. 图片像素、英寸、厘米之间的单位换算
  3. spark- PySparkSQL之PySpark解析Json集合数据
  4. Open Images冠军,商汤提出解偶检测分支新方法TSD并入选CVPR 2020
  5. 由几个问题引出EJB的概念
  6. String to Integer (atoi) leetcode java
  7. 解析利用wsdl.exe生成webservice代理类的详解
  8. 从四个层面落地,成为受欢迎、可信赖、懂技术的产品经理
  9. 英语什么意思_“你什么意思”用英语怎么说?千万不要说成“What#39;s your meaning?”...
  10. Android日期对话框NumberPicker的用法教程
  11. 语言怎么绘画人物肖像_国画里的新年,看看古人是怎么过年的!
  12. java gradle入门_Gradle入门:我们的第一个Java项目
  13. python3 shutil模块
  14. PyTorch 1.0 中文官方教程:可选:数据并行处理
  15. 常用youtube快捷键,让看视频学技术起飞
  16. 分享最近发现的几个实用 chrome/edge 扩展和油猴脚本
  17. 计算机在线作业题,精选《计算机原理与结构》在线作业试题
  18. 关于arduino的各种网站
  19. Linux从零学习记录(四)
  20. Flutter Container去掉边框

热门文章

  1. SSM-页面无法显示图片,样式等静态资源
  2. android录音波浪动画_Android实现波浪效果 - WaveView
  3. python怎么定义未知数_码如其人,同学你能写一手漂亮的Python函数吗
  4. channel(3) 一 基本定义
  5. Swift MD5加密
  6. Python爬虫(第三周)
  7. 对比Python,看看Excel如何3步给证件照换底色?
  8. 计算机科学与技术统考专业代码,考试类别和级别及专业及科目代码表.doc
  9. AtCoder Beginner Contest 126
  10. 阿里云携手NVIDIA拓展AI培训计划