zoukankan      html  css  js  c++  java
  • 轰炸东京

    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()
    

     

     

     

     

     

     

     

     

  • 相关阅读:
    菜吉の骗分导论
    P3527 [POI2011]MET-Meteors 整体二分
    整体二分
    P5459 [BJOI2016]回转寿司 cdq分治
    P3810 【模板】三维偏序(陌上花开) cdq分治
    cdq分治:从归并到cdq套cdq
    KDtree 详解
    查看.a和so文件接口
    机器学习 ONNX Model Zoo
    剖析依赖属性
  • 原文地址:https://www.cnblogs.com/webRobot/p/7240275.html
Copyright © 2011-2022 走看看