#%% 0. Imports
import matplotlib.pyplot as plt
import numpy as np
from metpy.plots import SkewT
from metpy.units import units

# https://unidata.github.io/MetPy/latest/api/generated/metpy.plots.SkewT.html#metpy.plots.SkewT.plot

#%% 1. Desenhar tefigrama
#### Ajustar e inicializar tefigrama
plt.rcParams['figure.figsize'] = (11, 8)
skew = SkewT(rotation=45)

# Adicionar eixos relevantes
skew.plot_dry_adiabats(label='Dry adiabat',colors='grey',alpha=0.9)             # Adiabáticas secas
skew.plot_moist_adiabats(label='Moist adiabat',colors='red',alpha=0.9)          # Adiabáticas húmidas
skew.plot_mixing_lines(pressure=np.linspace(1020,350,1000) * units("hPa"),      # Razão de mistura
                       label='Mixing ratio', colors='tab:cyan')

# Nomes dos eixos
skew.ax.set_xlabel('Temperature (\N{DEGREE CELSIUS})', fontsize=18)
skew.ax.set_ylabel('Pressure (hPa)', fontsize=18)

# Ajuste dos eixos
skew.ax.set_ylim(1020, 350)
skew.ax.set_xlim(-10, 40)
skew.ax.tick_params(axis='both', which='major', labelsize=16)

# Legenda da figura
plt.legend(fontsize=16)

#% 2. Adicionar os pontos relevantes
#### Primeiro e último pontos observados
skew.plot([1000], [20], 'o', markersize=10, markeredgecolor='black', markeredgewidth=2.5, markerfacecolor='orange')
skew.plot([1000], [30], 'o', markersize=10, markeredgecolor='black', markeredgewidth=2.5, markerfacecolor='orange')
#### Primeiro e último pontos de orvalho
skew.plot([1000], [10.5], 'o', markersize=10, markeredgecolor='black', markeredgewidth=2.5, markerfacecolor='tab:blue')
skew.plot([1000], [1.4], 'o', markersize=10, markeredgecolor='black', markeredgewidth=2.5, markerfacecolor='tab:blue')

#### Ponto da base da nuvem
skew.plot([870], [8.4], 'o', markersize=10, markeredgecolor='black', markeredgewidth=2.5, markerfacecolor='orange')

#### Ponto no topo da ascensão
skew.plot([400], [-32], 'o', markersize=10, markeredgecolor='black', markeredgewidth=2.5, markerfacecolor='orange')

#### Ponto da base da nuvem na encosta de descida
skew.plot([655], [-4.5], 'o', markersize=10, markeredgecolor='black', markeredgewidth=2.5, markerfacecolor='orange')

#### Adiabática seca
skew.plot_dry_adiabats(t0 = [20+273.15, 30+273.15] * units.K, label='Dry adiabat',colors='grey',alpha=0.9)
#### Adiabática húmida
skew.plot_moist_adiabats(t0 = [14.2+273.15,0] * units.K, label='Moist adiabat',colors='red',alpha=0.9)
#### Razão de mistura
skew.plot_mixing_lines(mixing_ratio=[4.2,8] * units('g/kg'), pressure=np.linspace(1020,350,1000) * units("hPa"), label='Mixing ratio',colors='tab:cyan',alpha=0.9)
