轰炸东京

QQ:231469242 版权所有

——此文以纪念南京大屠杀79周年

 

今天我教你们如何用python的basemap包绘制轰炸东京的地图。

 

在数据可视化过程中,我们常常需要将数据根据其采集的地理位置在地图上显示出来。比如说我们会想要在地图上画出城市,飞机的航线,乃至于军事基地等等。通常来说,一个地理信息系统都会带有这样的功能。今天我们讨论如何在Python上实现,并且使用免费的工具包。

 

matplotlib是Python常用的数据绘制包。它基于numpy的数组运算功能。matplotlib绘图功能强大,可以轻易的画出各种统计图形,比如散点图,条行图,饼图等。matplotlib常与numpy和scipy相配合,用于许多研究领域。他们是免费工具,但其功能足可以与科研界的大佬Matlab竞争。

 

Basemap是Matplotlib的一个子包,负责地图绘制。在数据可视化过程中,我们常需要将数据在地图上画出来。比如说我们在地图上画出城市人口,飞机航线,军事基地,矿藏分布等等。这样的地理绘图有助于读者理解空间相关的信息。 

 

Matplotlib官网: 

 

http://matplotlib.org/  

 

Basemap官网: 

 

http://matplotlib.org/basemap/

 

 

通过学习basemap,我们设置北京为导弹发射基地,日本的东京,广岛,长崎,大阪为攻击目标,导弹发射轨迹分别为四条不同颜色曲线(红,黄,绿,蓝)。此脚本全部代码如下,并添加了中文注解。各位朋友可以亲手实践。(此图为缩略图)

 

 

# -*- coding: utf-8 -*-
"""
Created on Wed Dec 14 09:59:34 2016
#轰炸东京
@author: Administrator
"""

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np

# 创建一个fig对象,自定义fig的size
fig = plt.figure(figsize=(30,35))
# 划分fig并且选择一个子图给ax变量
ax = fig.add_subplot(1,1,1)

#width=2000,height=2000
m = Basemap(projection='mill', llcrnrlat=20, urcrnrlat=50, llcrnrlon=70, urcrnrlon=150)
m.drawcoastlines()

m.drawcountries(linewidth=2)
#m.drawrivers()

# bjlat, bjlon are lat/lon of Bei jing北京的经纬度
bjlat = 40; bjlon = 116
#tokyolat,tokyolon 表示东京的经纬度
tokyolat,tokyolon=35.42,139.46
#广岛坐标
Hiroshima_lat, Hiroshima_lon=34.24,132.27
#大阪坐标
Osaka_lat,Osaka_lon= 34.4,135.3
#长崎坐标
Nagasaki_lat,Nagasaki_lon=32.46,129.52

# draw parallels
m.drawparallels(np.arange(10,90,20),labels=[1,1,0,1])
# draw meridians
m.drawmeridians(np.arange(-180,180,30),labels=[1,1,0,1])
#m.drawmapboundary(fill_color='aqua')
# fill continents, set lake color same as ocean color.
#m.fillcontinents(color='coral',lake_color='aqua')

def Draw_position(lon,lat,city,mark,markersize=100):
    xpt,ypt=m(lon,lat)
    #convert back to lat/lon
    lonpt,latpt=m(xpt,ypt,inverse=True)
    m.plot(xpt,ypt,mark,markersize) #plot a blue dot there
    plt.text(xpt+100000,ypt+100000,city)
   
   
#绘制东京坐标
Draw_position(139.46,35.42,"Tokyo",'c*',100)

#绘制北京坐标
Draw_position(116,40,"Beijign",'g^',100)

#绘制广岛坐标
Draw_position(132.27,34.24,"Hiroshima",'c*',100)

#绘制大阪坐标
Draw_position(135.3,34.4,"Osaka",'c*',100)
#绘制长崎坐标
Draw_position(Nagasaki_lon,Nagasaki_lat,"Nagasaki",'c*',100)
#tokyolat,tokyolon 表示萨德部署地的经纬度
THAADlat,THAADlon=36.119485,128.3445734
#绘制萨德坐标
Draw_position(128.3445734,36.119485,"THAAD",'c*',100)
#链接北京和东京的路线
m.drawgreatcircle(bjlon,bjlat,tokyolon,tokyolat,linewidth=2,color='b')
#链接北京和广岛的路线
m.drawgreatcircle(bjlon,bjlat,Hiroshima_lon,Hiroshima_lat,linewidth=2,color='r')
#链接北京和大阪的路线
m.drawgreatcircle(bjlon,bjlat,Osaka_lon,Osaka_lat,linewidth=2,color='y')

#链接北京和长崎的路线
m.drawgreatcircle(bjlon,bjlat,Nagasaki_lon,Nagasaki_lat,linewidth=2,color='g')
#链接北京和萨德的路线
m.drawgreatcircle(bjlon,bjlat,THAADlon,THAADlat,linewidth=2,color='b')
m.etopo()
#添加图例,文字说明
plt.legend(loc=4)
plt.title("Bomb Japs and Saad made by Toby!")
plt.show()

 

 

 

 

 

 

 

 

原文地址:https://www.cnblogs.com/webRobot/p/7240275.html