前面是虾神的话:吴道长一直在念叨这是他写的python的封笔之作了,不过虾神一直不相信道长的人品,所以他说的话,基本不作数,以后肯定还会有的……
————我是分割线————
练得身形似鹤形,
千株松下两函经。
我来问道无馀说,
云在青天水在瓶。
-------------------------------------------------------
道长是一只数据猿,每天需要面对形形色色的数据:有.xls的,有.shp的,有.tif的还有.avi的,更有.rmd的………………..当然除了后面两个,其他的数据都是死的,生硬的,当如果数据能够按着一定方向,反复,有规律地进行某种神圣的原始运动,你会发现,咦,生命是多么奇妙啊!
静者,时也;动者,常也。
鄙司是一家专门做防灾减灾的企业,台风一来我们就会高喊一声'妈妈桑,来且了’,测试'莫拉克’台风期间的网页浏览人数的压力中,当达到300W次数时,司里的技术员达到一种莫名的亢奋,当然道长没有开爬虫去爬自家数据,不然也是一股子攒力。
# -*- coding: gbk -*-
import json
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import NullFormatter
from matplotlib.animation import FuncAnimation
from matplotlib.colorbar import Colorbar
from numpy.ma.core import size
from pylab import mpl
import cartopy.crs as ccrs
import cartopy.feature as cfeature
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
###以下是解析我获得某份台风路径的json
File = file(r'E:\桌面\台风路径\tsconfig.json')
jsonobj = json.load(File)
X = [ float(jsonobj[0]['points'][i]['lng']) for i in range(94)]
Y = [ float(jsonobj[0]['points'][i]['lat']) for i in range(94)]
num = len(X)
File.close()
###在这里我用cartopy绘制了地理背景和一个鹰眼图
fig = plt.figure(figsize=(14,10))
axMap = plt.axes([0.1,0.1,0.8,0.8],projection=ccrs.PlateCarree())
axMap.set_extent([114,130,18.5,29.5], ccrs.Geodetic())
land1 = cfeature.NaturalEarthFeature('cultural', 'china_coastalProvince','50m',edgecolor='white',facecolor='khaki')
axMap.add_feature(land1)
ocean = cfeature.NaturalEarthFeature('cultural', 'ocean','50m',edgecolor='khaki',facecolor=cfeature.COLORS['water'])
axMap.add_feature(ocean)
axMap.set_xticks([114.5,117.5,120.5,123.5,126.5,129.5],crs=ccrs.PlateCarree())
axMap.set_yticks([19,21,23,25,27,29],crs=ccrs.PlateCarree())
axMap.xaxis.set_major_formatter(LongitudeFormatter())
axMap.yaxis.set_major_formatter(LatitudeFormatter())
axMap.grid()
eagleMap = plt.axes([0.635,0.58,0.3,0.3],projection=ccrs.PlateCarree())
land2 = cfeature.NaturalEarthFeature('cultural', 'land','10m',edgecolor='face',facecolor=cfeature.COLORS['land'])
eagleMap.add_feature(land2, facecolor='0.85')
eagleMap.set_extent([118,121,22,25], ccrs.Geodetic())
P = np.zeros(num, dtype=[('size', float, 1),('color',float, 4)])
scat = axMap.scatter(X,Y, P['size'], lw = 1,edgecolors =P['color'] , facecolors='None', zorder=10)
line1, = axMap.plot([],[], lw=0.5,marker='+',color='green')
line2, = eagleMap.plot([],[], lw=0.5,marker='+',color='blue')
###以下是一个动画装置,设定了一个流程内的动画的帧数和效果
def update(frame):
i = frame % num
P['color'][:,3] = np.maximum(0, P['color'][:,3] - 1.0/4)
P['size'] -= (400 - 0)/4
P['size'][i] = 800
P['color'][i] = 0,0,1,1
scat.set_edgecolors(P['color'])
scat.set_facecolors(P['color']*(1,1,1,0.75))
scat.set_sizes(P['size'])
n = X[:i+1]
m = Y[:i+1]
line1.set_data(n, m)
line2.set_data(n, m)
return line1,line2,scat
animation = FuncAnimation(fig,update, interval = 300)###动画触发器
fig.suptitle(u'201601-Nepartak-RambleRoute',fontsize=16)
plt.show()
最后看看我的动图效果吧。
这是道长写的最后一篇Python,除非在pygame上有好玩的事物的发现。半年来,涉入代码的领域,勉强成了一只初级程序猿。受益良多,当然道长兴趣点是可视化,Python能做有点局限的,so,我想转个方向了,但是Python大法一定好。最后大谢,大虾和熊爷的教导。
-------------------------------------------------------------------
最后虾神点评:
贴出一本书:《代码简洁之道》
全文如下:
【用python】
全书完……
所以我坚信道长以后还会回来继续写python的……
联系客服