Базовая карта сложенного 3D сюжета - PullRequest
0 голосов
/ 31 марта 2020

Я сложил несколько слоев выходной переменной модели. Переменная имеет следующий вид: var [время, высота, долг, широта]. Для лучшего обзора я создаю 3D-график базовой карты. Теперь у меня проблемы. Во-первых: Contourf является линейным, это означает, что значения плохо представлены. Я хочу изменить это на логарифмическую шкалу. Обычно я делаю это с уровнями и межстрочным интервалом, но это не работает.

Второе: цветовая шкала зависит от неправильного значения (altiude). Как я могу изменить зависимость от вар. Текущий сюжет выглядит так:

import numpy as np
import netCDF4 as nc
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import ticker, cm


x,y = np.meshgrid(lons[:],lats[:])

# create a 3d normal figure
fig = plt.figure(figsize=(6,20))
ax = fig.gca(projection='3d')

#Draw the earth map using Basemap
# Define lower left, upper right longitude and latitude respectively
extent = [lons.min(), lons.max(), lats.min(), lats.max()]
    # Create a basemap instance that draws the Earth layer
bm = Basemap(llcrnrlon=extent[0], llcrnrlat=extent[2],
             urcrnrlon=extent[1], urcrnrlat=extent[3],
             projection='cyl', resolution='l', fix_aspect=False, ax=ax)

# Add Basemap to the figure
ax.add_collection3d(bm.drawcoastlines(linewidth=0.25))
ax.add_collection3d(bm.drawcountries(linewidth=0.35))
ax.view_init(azim=300, elev=10)
ax.set_xlabel('Longitude (°E)', labelpad=20)
ax.set_ylabel('Latitude (°N)', labelpad=20)
ax.set_zlabel('Height (m)', labelpad=20)

# Add meridian and parallel gridlines
lon_step = 10
lat_step = 10
meridians = np.arange(extent[0], extent[1] + lon_step, lon_step)
parallels = np.arange(extent[2], extent[3] + lat_step, lat_step)
ax.set_yticks(parallels)
ax.set_yticklabels(parallels)
ax.set_xticks(meridians)
ax.set_xticklabels(meridians)
#ax.set_zticks(d)
#ax.set_zticklabels(d)


level = np.arange(0,7000,1000)
#spd = np.sqrt(abs(u*u)+abs(v*v))
#skip=(slice(None,None,2),slice(None,None,2))
ax.contourf(x,y,var[0,Levelind[0]-1,:,:],offset=0,levels = level, cmap='jet' , 
alpha=0.8)
#ax.quiver(x, y, d,u, v,w,length=0.5 )

img = ax.contourf(x,y,var[0,Levelind[1]-1,:,:],offset=1000,levels=level,cmap='jet', 
alpha=0.8)
ax.contourf(x,y,var[0,Levelind[2]-1,:,:],offset=2000,levels=level,cmap='jet', 
alpha=0.8)
ax.contourf(x,y,var[0,Levelind[3]-1,:,:],offset=3000,levels=level,cmap='jet', 
alpha=0.8)
ax.contourf(x,y,var[0,Levelind[4]-1,:,:],offset=4000,levels=level,cmap='jet', 
alpha=0.8)
ax.contourf(x,y,var[0,Levelind[5]-1,:,:],offset=5000,levels=level,cmap='jet', 
alpha=0.8)
ax.contourf(x,y,var[0,Levelind[6]-1,:,:],offset=6000,levels=level,cmap='jet', 
alpha=0.8)

ax.set_zlim(0., 6000)
cax = fig.add_axes([0.15, 0.1, 0.7, 0.02])   #(left,bottom,right,top)
fig.colorbar(img,cax, orientation="horizontal")
#fig.colorbar(img, orientation="vertical")
plt.show()

Если вам нужна дополнительная информация, дайте мне знать.

Большое спасибо. enter image description here

...