Как я могу повернуть ось контурного графика? - PullRequest
0 голосов
/ 28 апреля 2019

Я написал код, который моделирует атмосферную дисперсию.Существует сетка, которая имеет как отрицательные, так и положительные значения по осям x и y, которые представляют расстояние в километрах.Для каждой координаты в сетке рассчитывается уровень загрязнителя, который зависит от расстояния x и y (по ветру и по ветру).Я хотел бы изменить направление ветра (с заданным углом) и повернуть сюжет.Есть ли способ сделать это?

#grid arrangement
steps = np.arange(-1, 1, 0.1)
mesh = np.meshgrid(steps, steps)
coor = np.stack(mesh, -1).reshape(-1,2)
#there is problem in the grid about zeros therefore i had to define zero here
coor[200:220,1] = 0 
#following line is to prevent negative x values which represents distance
coor[coor[:,0]<0,0] = 0.001
#following line is to prevent division by zero
coor[0:400:10,0] = 0.001

#input values
D = 1
stack_height = 100
Q = 10
plume_t = 473
stack_exit_velocity = 20
u = 4
T = 293

#calculations
F = 9.8 * float(stack_exit_velocity) * pow(float(D),2) * ((float(plume_t) 
- float(T)) / (4 * float(plume_t)))

#weather adjustments
 stability_lowx = np.array([[213,440.8,1.941,9.27],[156,106.6,1.149,3.3], 
[104,61,0.911,0],[68,33.2,0.725,-1.7],[50.5,22.8,0.678,-1.3], 
[34,14.35,0.740,-0.35]])
stability_highx = np.array ([[213,459.7,2.094,-9.6],[156,108.2,1.098,2], 
[104,61,0.911,0],[68,44.5,0.516,-13],[50.5,55.4,0.305,-34], 
[34,62.6,0.180,-48.6]])
wind_adj = [0.07,0.1,0.15,0.35,0.55]

##calculations
sigmay = np.array([stability_lowx[1,0] * pow(xx, 0.894) if xx <= 1
               else stability_highx[1,0] * pow(xx, 0.894) for xx in 
coor[:,0]])
sigmaz = np.array([stability_lowx[1,1] * pow(xx, stability_lowx[1,2]) + 
stability_lowx[1,3] if xx <= 1
               else stability_highx[1,1] * pow(xx, stability_highx[1,2]) 
+ stability_highx[1,3] for xx in coor[:,0]])
sigmaz[sigmaz > 5000.] = 5000
uh = float(u) * pow((float(stack_height) / 10), wind_adj[0])  
buoyant_rise = 21.425 * pow(F, 0.75) / uh if F < 55 else 38.71 * 
pow(F,3/5) / uh
momentum_rise = 3 * float(D) * (float(stack_exit_velocity) / uh)
H = float(stack_height) + max(buoyant_rise,momentum_rise)
uhe = float(u) * pow((H / 10), wind_adj[0])
sigmu = np.multiply(sigmay,sigmaz)
syy = np.multiply(np.square(sigmay),2)
szz = np.multiply(np.square(sigmaz),2)
ym = np.multiply(np.absolute(coor[:,1]),1000)
cc = (float(Q) / (2 * np.pi * uhe * sigmu)) * np.exp(- 
np.divide(np.square(ym),syy)) * (np.exp(-np.divide(np.square(H),szz))

+ np.exp(-np.divide(np.square(H),szz)))
c = np.multiply(cc,1000000)
c = c.reshape(len(steps),len(steps))

#contour plot
fig2, ax2 = plt.subplots(constrained_layout=True)
levels = [2,4,6,8,10,12,14,16,16.95]
CS3 = ax2.contourf(steps, steps, c, levels,
               cmap='gray_r',
               extend='both')
CS3.cmap.set_under('w')
CS3.cmap.set_over('cyan')
CS4 = ax2.contour(steps, steps, c, levels, colors=('k',), 
linewidths=0.1)
ax2.set_title('Atmospheric Dispersion Model @ Weather Stability B')
ax2.set_xlabel('Downwind Distance in km')
ax2.set_ylabel('Crosswind Distance in km')
ax2.clabel(CS4, fmt='%2.1f', colors='cyan', fontsize=6)
fig2.colorbar(CS3)
cbar = fig2.colorbar(CS3)
cbar.ax.set_ylabel('Pollutant Concentration in μg/m³')
cbar.add_lines(CS4)
plugins.connect(fig2, plugins.MousePosition(fontsize=14))
plt.show()
...