[3159] | 1 | #!/usr/bin/env python3 |
---|
| 2 | |
---|
| 3 | import matplotlib |
---|
| 4 | import sys |
---|
| 5 | from matplotlib import colors, ticker, cm |
---|
| 6 | from matplotlib.backends.backend_pdf import PdfPages |
---|
| 7 | from netCDF4 import Dataset |
---|
| 8 | import matplotlib.pyplot as plt |
---|
| 9 | import numpy as np |
---|
| 10 | import math |
---|
| 11 | from matplotlib import animation |
---|
| 12 | import matplotlib.gridspec as gridspec |
---|
| 13 | from matplotlib.lines import Line2D |
---|
| 14 | from matplotlib.collections import PatchCollection |
---|
| 15 | from matplotlib.patches import Polygon |
---|
| 16 | matplotlib.rcParams['text.usetex'] = True |
---|
| 17 | |
---|
| 18 | |
---|
| 19 | input_file_name = './canyon_agt.001.nc' |
---|
| 20 | |
---|
| 21 | file_content = Dataset(input_file_name, mode='r') # load entire netCDF file |
---|
| 22 | print(file_content) |
---|
| 23 | time = file_content.variables['time'][:] # extract variable |
---|
| 24 | agx = file_content.variables['ag_x'][:,:] |
---|
| 25 | agy = file_content.variables['ag_y'][:,:] |
---|
| 26 | grp = file_content.variables['ag_group'][:,:] |
---|
| 27 | file_content.close() # close netCDF file |
---|
| 28 | |
---|
| 29 | input_file_name = './topo.txt' |
---|
| 30 | f = open(input_file_name, mode='r') |
---|
| 31 | data = [] |
---|
| 32 | building_id = [] |
---|
| 33 | vertex_id = [] |
---|
| 34 | polygon = [] |
---|
| 35 | gons = [] |
---|
| 36 | p_last = 1 |
---|
| 37 | for line in f: |
---|
| 38 | line = line.strip() |
---|
| 39 | columns = line.split() |
---|
| 40 | if (int(columns[0]) > p_last): |
---|
| 41 | gons.append(polygon) |
---|
| 42 | polygon = [] |
---|
| 43 | polygon.append([float(columns[2]),float(columns[3])]) |
---|
| 44 | p_last = int(columns[0]) |
---|
| 45 | gons.append(polygon) |
---|
| 46 | nop = int(columns[0]) |
---|
| 47 | patches = [] |
---|
| 48 | |
---|
| 49 | for i in range(nop): |
---|
| 50 | poly = Polygon(gons[i-1], True) |
---|
| 51 | patches.append(poly) |
---|
| 52 | p = PatchCollection(patches,facecolors='grey') |
---|
| 53 | |
---|
| 54 | Nt = np.shape(time)[0] |
---|
| 55 | print(Nt) |
---|
| 56 | Nt = Nt -1 |
---|
| 57 | Nags = np.shape(agx[1,:]) |
---|
| 58 | Nx = 40 |
---|
| 59 | Ny = 40 |
---|
| 60 | |
---|
| 61 | x = np.linspace(0.0, 40.0, Nx) |
---|
| 62 | y = np.linspace(0.0, 40.0, Ny) |
---|
| 63 | X, Y = np.meshgrid(x, y) |
---|
| 64 | |
---|
| 65 | fig,ax = plt.subplots() |
---|
| 66 | fig.set_size_inches(4., 8.) |
---|
| 67 | xrange = [10, 30] |
---|
| 68 | yrange = [0, 40] |
---|
| 69 | |
---|
| 70 | |
---|
| 71 | def animate(i): |
---|
| 72 | ax.clear() |
---|
| 73 | ax.add_collection(p) |
---|
| 74 | x = agx[i,:] |
---|
| 75 | y = agy[i,:] |
---|
| 76 | ax.set_xlim(*xrange) |
---|
| 77 | ax.set_ylim(*yrange) |
---|
| 78 | ax.scatter(x,y,s=15,c=grp[i,:]) |
---|
| 79 | plt.title(r'simulated time: %i s' % time[i]) |
---|
| 80 | k = i/Nt*100. |
---|
| 81 | print("Done: %6.2f percent\r" % k, file=sys.stdout, end=" ") |
---|
| 82 | return ax, |
---|
| 83 | |
---|
[3268] | 84 | anim = animation.FuncAnimation(fig, animate, frames=Nt, interval=20, blit=False,save_count=0) |
---|
[3159] | 85 | anim.save('ags.mp4', dpi=200, writer='ffmpeg') |
---|