前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >​如何使用WRFOUT绘制探空图进阶版

​如何使用WRFOUT绘制探空图进阶版

作者头像
用户11172986
发布2024-06-20 17:36:29
620
发布2024-06-20 17:36:29
举报
文章被收录于专栏:气python风雨气python风雨

前言

本项目将带领您使用WRFOUT数据绘制探空图,探索大气垂直结构。我们将使用Python中的MetPy库和Matplotlib库来处理和可视化WRF模型输出数据。

在本项目中,我们将学习如何:

从WRFOUT文件中提取探空所需的变量,如压力、温度、露点温度、风向和风速。 使用MetPy库将变量单位转换为适当的物理单位,并计算其他有用的气象参数,如相对湿度。 使用Matplotlib库创建探空图,展示大气垂直结构,并标注重要的气象参数。 添加自定义标记和注释,以使探空图更具可读性和专业性。 通过完成本项目,您将掌握使用Python处理WRF模型输出数据并绘制探空图的基本技能,有助于您更好地理解和分析大气中的垂直变化。

镜像:气象分析3.7 数据:自制wrfout数据

提示:代码参考https://unidata.github.io/MetPy/latest/examples/Advanced_Sounding_With_Complex_Layout.html

导入库

In [4]:

代码语言:javascript
复制
#
代码语言:javascript
复制
 First let's start with some simple imports
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

import metpy.calc as mpcalc
from metpy.cbook import get_test_data
from metpy.plots import add_metpy_logo, Hodograph, SkewT
from metpy.units import units
from wrf import uvmet, to_np, getvar, interplevel, smooth2d, get_cartopy, cartopy_xlim, cartopy_ylim, latlon_coords,ll_to_xy
import numpy as np
from netCDF4 import Dataset
import matplotlib.pyplot as plt
import matplotlib as m
import metpy.calc as mpcalc
from metpy.plots import Hodograph, SkewT
from metpy.units import units
import metpy.calc as mpcalc
from metpy.cbook import get_test_data
from metpy.plots import add_metpy_logo, SkewT
from metpy.units import units
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.inset_locator import inset_axes
代码语言:javascript
复制

数据读取与转化为pandas

In [5]:

代码语言:javascript
复制
代码语言:javascript
复制
#读取WRF输出文件
wrfin = Dataset('/home/mw/input/wrfout3385/wrfout_d02_2022-07-14_0700.nc')

#指定要提取的经纬度坐标点
lat_lon = [35, 104]

#将经纬度坐标转换为模型坐标系(x, y)
x_y = ll_to_xy(wrfin, lat_lon[0], lat_lon[1])

#提取所需变量数据
p = getvar(wrfin, "pressure", timeidx=0)[:, x_y[0], x_y[1]] * units.hPa
T = getvar(wrfin, "tc", timeidx=0)[:, x_y[0], x_y[1]] * units.degC
Td = getvar(wrfin, "td", timeidx=0)[:, x_y[0], x_y[1]] * units.degC
u = getvar(wrfin, "ua", timeidx=0)[:, x_y[0], x_y[1]] * units('m/s')
v = getvar(wrfin, "va", timeidx=0)[:, x_y[0], x_y[1]] * units('m/s')
h = getvar(wrfin, "height", timeidx=0)[:, x_y[0], x_y[1]] 

# 计算风向和风速
wind_dir = mpcalc.wind_direction(u, v)
wind_speed = mpcalc.wind_speed(u, v)
代码语言:javascript
复制

因为是模拟数据,没有nan值就不作处理

In [6]:

代码语言:javascript
复制
代码语言:javascript
复制
# 将变量转换为pandas数据框
data = {'pressure': p, 'height': h, 'temperature': T,
        'dewpoint': Td, 'direction': wind_dir, 'speed': wind_speed}
df = pd.DataFrame(data)
df
代码语言:javascript
复制

Out[6]:

pressure

height

temperature

dewpoint

direction

speed

0

943.985352

520.198059

32.352478

22.249786

173.563004

4.560096

1

937.630615

581.346436

31.644012

21.787685

174.424530

5.573391

2

929.556824

659.033325

30.854553

21.485380

175.379730

5.930669

3

919.438904

757.166809

29.893890

21.191944

176.281525

6.096784

4

906.881775

880.202393

28.709045

20.865412

177.253723

6.161201

5

891.476624

1033.035889

27.250488

20.476461

178.732330

6.154555

6

872.767883

1220.762939

25.464203

19.987505

180.915268

6.098031

7

850.493835

1448.283936

23.326904

19.303892

184.701294

6.031889

8

824.462097

1719.740967

21.045746

17.734608

193.769211

6.187472

9

794.750366

2038.156982

20.123383

12.263219

207.160187

7.180388

10

761.633423

2405.482910

19.506012

5.936941

202.073013

7.949438

11

725.601379

2821.581299

18.023834

-0.173127

191.301971

7.303473

12

687.296143

3283.545654

15.787170

-6.051855

174.246216

5.806906

13

647.411987

3787.612061

12.561188

-8.418921

140.167648

3.927935

14

606.331848

4333.663086

8.837128

-10.864210

95.477211

3.086081

15

566.007507

4898.102051

4.749023

-14.805732

57.554775

3.682608

16

528.298096

5455.543457

1.055725

-19.578125

64.445663

3.437842

17

493.058929

6007.291504

-1.319977

-31.940838

115.304291

3.008985

18

460.090851

6555.794434

-3.268036

-45.036537

161.520844

4.939357

19

429.213074

7101.801270

-5.814728

-43.751118

156.900665

7.625146

20

400.273621

7644.802246

-8.792572

-44.145741

141.799286

8.342997

21

373.144714

8184.130859

-12.256317

-44.045998

134.284042

8.280623

22

347.708618

8719.172852

-16.021942

-44.819721

131.203552

7.658325

23

323.864716

9249.713867

-19.812988

-46.924389

130.019043

6.590580

24

301.514160

9775.668945

-23.736221

-49.687439

125.813492

5.560450

25

280.569458

10296.727539

-27.875992

-53.631744

101.562874

5.099050

26

260.943420

10812.695312

-32.060272

-49.909401

85.334778

5.956165

27

242.563034

11323.200195

-36.477219

-48.752514

87.081406

7.033397

28

225.406082

11826.583984

-40.750198

-49.067841

86.745895

9.056532

29

209.448914

12321.805664

-44.440414

-49.997738

80.000626

13.469767

30

194.621262

12809.050781

-48.156723

-53.990211

78.625031

17.567860

31

180.844040

13287.771484

-52.342529

-58.609692

80.277695

18.865040

32

168.041809

13757.522461

-56.484619

-63.112320

78.791733

19.316374

33

156.145294

14218.854492

-60.171005

-66.167366

70.582771

20.821161

34

145.092346

14672.651367

-63.499786

-69.599571

62.424961

23.402493

35

134.820816

15119.364258

-66.764023

-72.987907

57.396305

26.121828

36

125.275864

15559.001953

-70.088821

-75.606995

55.394241

27.428947

37

116.407120

15992.118164

-72.842148

-79.010063

60.044327

26.893284

38

108.165977

16420.232422

-74.750351

-80.447861

70.432640

25.205303

39

100.507690

16844.751953

-76.192749

-80.447861

82.011841

22.888161

40

93.393013

17266.359375

-77.469101

-80.447861

86.693985

20.770243

41

86.780533

17686.335938

-77.716248

-80.447861

87.425171

19.650486

42

80.637291

18106.185547

-77.593887

-80.447861

87.339310

18.539335

43

74.928581

18526.910156

-76.902344

-80.447861

84.728310

17.221291

44

69.623833

18950.027344

-75.374191

-80.447861

79.777496

15.912707

45

64.694771

19377.269531

-73.063370

-80.447861

74.544220

15.561893

46

60.114914

19809.617188

-70.625854

-80.447861

71.903061

15.667484

47

55.859241

20247.150391

-68.238922

-80.447861

71.870743

15.989688

48

51.904198

20689.757812

-65.902191

-80.447861

74.913803

17.490532

给变量乘单位

In [7]:

代码语言:javascript
复制
代码语言:javascript
复制
p = df['pressure'].values * units.hPa
z = df['height'].values * units.m
T = df['temperature'].values * units.degC
Td = df['dewpoint'].values * units.degC
wind_speed = df['speed'].values * units.knots
wind_dir = df['direction'].values * units.degrees
u, v = mpcalc.wind_components(wind_speed, wind_dir)
代码语言:javascript
复制

简易版

In [9]:

代码语言:javascript
复制
代码语言:javascript
复制
fig = plt.figure(figsize=(9, 9))
skew = SkewT(fig, rotation=45, rect=(0.1, 0.1, 0.55, 0.85))

# Plot the data using normal plotting functions, in this case using
# log scaling in Y, as dictated by the typical meteorological plot
skew.plot(p, T, 'r')
skew.plot(p, Td, 'g')
skew.plot_barbs(p, u, v)

# Change to adjust data limits and give it a semblance of what we want
skew.ax.set_adjustable('datalim')
skew.ax.set_ylim(1000, 100)
skew.ax.set_xlim(-20, 30)

# Add the relevant special lines
skew.plot_dry_adiabats()
skew.plot_moist_adiabats()
skew.plot_mixing_lines()

# Create a hodograph
ax = plt.axes((0.7, 0.75, 0.2, 0.2))
h = Hodograph(ax, component_range=60.)
h.add_grid(increment=20)
h.plot(u, v)
代码语言:javascript
复制

Out[9]:

代码语言:javascript
复制
[<matplotlib.lines.Line2D at 0x7f45e9a01650>]

进阶版

In [12]:

代码语言:javascript
复制
代码语言:javascript
复制
# STEP 1: CREATE THE SKEW-T OBJECT AND MODIFY IT TO CREATE A
# NICE, CLEAN PLOT
# Create a new figure. The dimensions here give a good aspect ratio
fig = plt.figure(figsize=(18, 12))
skew = SkewT(fig, rotation=45, rect=(0.05, 0.05, 0.50, 0.90))

# Change to adjust data limits and give it a semblance of what we want
skew.ax.set_adjustable('datalim')
skew.ax.set_ylim(1000, 100)
skew.ax.set_xlim(-20, 30)

# Set some better labels than the default to increase readability
skew.ax.set_xlabel(str.upper(f'Temperature ({T.units:~P})'), weight='bold')
skew.ax.set_ylabel(str.upper(f'Pressure ({p.units:~P})'), weight='bold')

# Set the facecolor of the skew-t object and the figure to white
fig.set_facecolor('#ffffff')
skew.ax.set_facecolor('#ffffff')

# Here we can use some basic math and Python functionality to make a cool
# shaded isotherm pattern.
x1 = np.linspace(-100, 40, 8)
x2 = np.linspace(-90, 50, 8)
y = [1100, 50]
for i in range(0, 8):
    skew.shade_area(y=y, x1=x1[i], x2=x2[i], color='gray', alpha=0.02, zorder=1)

# STEP 2: PLOT DATA ON THE SKEW-T. TAKE A COUPLE EXTRA STEPS TO
# INCREASE READABILITY
# Plot the data using normal plotting functions, in this case using
# log scaling in Y, as dictated by the typical meteorological plot
# Set the linewidth to 4 for increased readability.
# We will also add the 'label' keyword argument for our legend.
skew.plot(p, T, 'r', lw=4, label='TEMPERATURE')
skew.plot(p, Td, 'g', lw=4, label='DEWPOINT')

# Again we can use some simple Python math functionality to 'resample'
# the wind barbs for a cleaner output with increased readability.
# Something like this would work.
interval = np.logspace(2, 3, 40) * units.hPa
idx = mpcalc.resample_nn_1d(p, interval)
skew.plot_barbs(pressure=p[idx], u=u[idx], v=v[idx])

# Add the relevant special lines native to the Skew-T Log-P diagram &
# provide basic adjustments to linewidth and alpha to increase readability
# first, we add a matplotlib axvline to highlight the 0-degree isotherm
skew.ax.axvline(0 * units.degC, linestyle='--', color='blue', alpha=0.3)
skew.plot_dry_adiabats(lw=1, alpha=0.3)
skew.plot_moist_adiabats(lw=1, alpha=0.3)
skew.plot_mixing_lines(lw=1, alpha=0.3)

# Calculate LCL height and plot as a black dot. Because `p`'s first value is
# ~1000 mb and its last value is ~250 mb, the `0` index is selected for
# `p`, `T`, and `Td` to lift the parcel from the surface. If `p` was inverted,
# i.e. start from a low value, 250 mb, to a high value, 1000 mb, the `-1` index
# should be selected.
lcl_pressure, lcl_temperature = mpcalc.lcl(p[0], T[0], Td[0])
skew.plot(lcl_pressure, lcl_temperature, 'ko', markerfacecolor='black')
# Calculate full parcel profile and add to plot as black line
prof = mpcalc.parcel_profile(p, T[0], Td[0]).to('degC')
skew.plot(p, prof, 'k', linewidth=2, label='SB PARCEL PATH')

# Shade areas of CAPE and CIN
skew.shade_cin(p, T, prof, Td, alpha=0.2, label='SBCIN')
skew.shade_cape(p, T, prof, alpha=0.2, label='SBCAPE')

# STEP 3: CREATE THE HODOGRAPH INSET. TAKE A FEW EXTRA STEPS TO
# INCREASE READABILITY
# Create a hodograph object: first we need to add an axis
# then we can create the Metpy Hodograph
hodo_ax = plt.axes((0.48, 0.45, 0.5, 0.5))
h = Hodograph(hodo_ax, component_range=80.)

# Add two separate grid increments for a cooler look. This also
# helps to increase readability
h.add_grid(increment=20, ls='-', lw=1.5, alpha=0.5)
h.add_grid(increment=10, ls='--', lw=1, alpha=0.2)

# The next few steps makes for a clean hodograph inset, removing the
# tick marks, tick labels, and axis labels
h.ax.set_box_aspect(1)
h.ax.set_yticklabels([])
h.ax.set_xticklabels([])
h.ax.set_xticks([])
h.ax.set_yticks([])
h.ax.set_xlabel(' ')
h.ax.set_ylabel(' ')

# Here we can add a simple Python for loop that adds tick marks
# to the inside of the hodograph plot to increase readability!
plt.xticks(np.arange(0, 0, 1))
plt.yticks(np.arange(0, 0, 1))
for i in range(10, 120, 10):
    h.ax.annotate(str(i), (i, 0), xytext=(0, 2), textcoords='offset pixels',
                  clip_on=True, fontsize=10, weight='bold', alpha=0.3, zorder=0)
for i in range(10, 120, 10):
    h.ax.annotate(str(i), (0, i), xytext=(0, 2), textcoords='offset pixels',
                  clip_on=True, fontsize=10, weight='bold', alpha=0.3, zorder=0)

# plot the hodograph itself, using plot_colormapped, colored
# by height
h.plot_colormapped(u, v, c=z, linewidth=6, label='0-12km WIND')
# compute Bunkers storm motion so we can plot it on the hodograph!
RM, LM, MW = mpcalc.bunkers_storm_motion(p, u, v, z)
h.ax.text((RM[0].m + 0.5), (RM[1].m - 0.5), 'RM', weight='bold', ha='left',
          fontsize=13, alpha=0.6)
h.ax.text((LM[0].m + 0.5), (LM[1].m - 0.5), 'LM', weight='bold', ha='left',
          fontsize=13, alpha=0.6)
h.ax.text((MW[0].m + 0.5), (MW[1].m - 0.5), 'MW', weight='bold', ha='left',
          fontsize=13, alpha=0.6)
h.ax.arrow(0, 0, RM[0].m - 0.3, RM[1].m - 0.3, linewidth=2, color='black',
           alpha=0.2, label='Bunkers RM Vector',
           length_includes_head=True, head_width=2)

# STEP 4: ADD A FEW EXTRA ELEMENTS TO REALLY MAKE A NEAT PLOT
# First we want to actually add values of data to the plot for easy viewing
# To do this, let's first add a simple rectangle using Matplotlib's 'patches'
# functionality to add some simple layout for plotting calculated parameters
#                                  xloc   yloc   xsize  ysize
fig.patches.extend([plt.Rectangle((0.563, 0.05), 0.334, 0.37,
                                  edgecolor='black', facecolor='white',
                                  linewidth=1, alpha=1, transform=fig.transFigure,
                                  figure=fig)])

# Now let's take a moment to calculate some simple severe-weather parameters using
# metpy's calculations
# Here are some classic severe parameters!
kindex = mpcalc.k_index(p, T, Td)
total_totals = mpcalc.total_totals_index(p, T, Td)

# mixed layer parcel properties!
ml_t, ml_td = mpcalc.mixed_layer(p, T, Td, depth=50 * units.hPa)
ml_p, _, _ = mpcalc.mixed_parcel(p, T, Td, depth=50 * units.hPa)
mlcape, mlcin = mpcalc.mixed_layer_cape_cin(p, T, prof, depth=50 * units.hPa)

# most unstable parcel properties!
mu_p, mu_t, mu_td, _ = mpcalc.most_unstable_parcel(p, T, Td, depth=50 * units.hPa)
mucape, mucin = mpcalc.most_unstable_cape_cin(p, T, Td, depth=50 * units.hPa)

# Estimate height of LCL in meters from hydrostatic thickness (for sig_tor)
new_p = np.append(p[p > lcl_pressure], lcl_pressure)
new_t = np.append(T[p > lcl_pressure], lcl_temperature)
lcl_height = mpcalc.thickness_hydrostatic(new_p, new_t)

# Compute Surface-based CAPE
sbcape, sbcin = mpcalc.surface_based_cape_cin(p, T, Td)
# Compute SRH
(u_storm, v_storm), *_ = mpcalc.bunkers_storm_motion(p, u, v, z)
*_, total_helicity1 = mpcalc.storm_relative_helicity(z, u, v, depth=1 * units.km,
                                                     storm_u=u_storm, storm_v=v_storm)
*_, total_helicity3 = mpcalc.storm_relative_helicity(z, u, v, depth=3 * units.km,
                                                     storm_u=u_storm, storm_v=v_storm)
*_, total_helicity6 = mpcalc.storm_relative_helicity(z, u, v, depth=6 * units.km,
                                                     storm_u=u_storm, storm_v=v_storm)

# Copmute Bulk Shear components and then magnitude
ubshr1, vbshr1 = mpcalc.bulk_shear(p, u, v, height=z, depth=1 * units.km)
bshear1 = mpcalc.wind_speed(ubshr1, vbshr1)
ubshr3, vbshr3 = mpcalc.bulk_shear(p, u, v, height=z, depth=3 * units.km)
bshear3 = mpcalc.wind_speed(ubshr3, vbshr3)
ubshr6, vbshr6 = mpcalc.bulk_shear(p, u, v, height=z, depth=6 * units.km)
bshear6 = mpcalc.wind_speed(ubshr6, vbshr6)

# Use all computed pieces to calculate the Significant Tornado parameter
sig_tor = mpcalc.significant_tornado(sbcape, lcl_height,
                                     total_helicity3, bshear3).to_base_units()

# Perform the calculation of supercell composite if an effective layer exists
super_comp = mpcalc.supercell_composite(mucape, total_helicity3, bshear3)

# There is a lot we can do with this data operationally, so let's plot some of
# these values right on the plot, in the box we made
# First lets plot some thermodynamic parameters
plt.figtext(0.58, 0.37, 'SBCAPE: ', weight='bold', fontsize=15,
            color='black', ha='left')
plt.figtext(0.71, 0.37, f'{sbcape:.0f~P}', weight='bold',
            fontsize=15, color='orangered', ha='right')
plt.figtext(0.58, 0.34, 'SBCIN: ', weight='bold',
            fontsize=15, color='black', ha='left')
plt.figtext(0.71, 0.34, f'{sbcin:.0f~P}', weight='bold',
            fontsize=15, color='lightblue', ha='right')
plt.figtext(0.58, 0.29, 'MLCAPE: ', weight='bold', fontsize=15,
            color='black', ha='left')
plt.figtext(0.71, 0.29, f'{mlcape:.0f~P}', weight='bold',
            fontsize=15, color='orangered', ha='right')
plt.figtext(0.58, 0.26, 'MLCIN: ', weight='bold', fontsize=15,
            color='black', ha='left')
plt.figtext(0.71, 0.26, f'{mlcin:.0f~P}', weight='bold',
            fontsize=15, color='lightblue', ha='right')
plt.figtext(0.58, 0.21, 'MUCAPE: ', weight='bold', fontsize=15,
            color='black', ha='left')
plt.figtext(0.71, 0.21, f'{mucape:.0f~P}', weight='bold',
            fontsize=15, color='orangered', ha='right')
plt.figtext(0.58, 0.18, 'MUCIN: ', weight='bold', fontsize=15,
            color='black', ha='left')
plt.figtext(0.71, 0.18, f'{mucin:.0f~P}', weight='bold',
            fontsize=15, color='lightblue', ha='right')
plt.figtext(0.58, 0.13, 'TT-INDEX: ', weight='bold', fontsize=15,
            color='black', ha='left')
plt.figtext(0.71, 0.13, f'{total_totals:.0f~P}', weight='bold',
            fontsize=15, color='orangered', ha='right')
plt.figtext(0.58, 0.10, 'K-INDEX: ', weight='bold', fontsize=15,
            color='black', ha='left')
plt.figtext(0.71, 0.10, f'{kindex:.0f~P}', weight='bold',
            fontsize=15, color='orangered', ha='right')

# now some kinematic parameters
plt.figtext(0.73, 0.37, '0-1km SRH: ', weight='bold', fontsize=15,
            color='black', ha='left')
plt.figtext(0.88, 0.37, f'{total_helicity1:.0f~P}',
            weight='bold', fontsize=15, color='navy', ha='right')
plt.figtext(0.73, 0.34, '0-1km SHEAR: ', weight='bold', fontsize=15,
            color='black', ha='left')
plt.figtext(0.88, 0.34, f'{bshear1:.0f~P}', weight='bold',
            fontsize=15, color='blue', ha='right')
plt.figtext(0.73, 0.29, '0-3km SRH: ', weight='bold', fontsize=15,
            color='black', ha='left')
plt.figtext(0.88, 0.29, f'{total_helicity3:.0f~P}',
            weight='bold', fontsize=15, color='navy', ha='right')
plt.figtext(0.73, 0.26, '0-3km SHEAR: ', weight='bold', fontsize=15,
            color='black', ha='left')
plt.figtext(0.88, 0.26, f'{bshear3:.0f~P}', weight='bold',
            fontsize=15, color='blue', ha='right')
plt.figtext(0.73, 0.21, '0-6km SRH: ', weight='bold', fontsize=15,
            color='black', ha='left')
plt.figtext(0.88, 0.21, f'{total_helicity6:.0f~P}',
            weight='bold', fontsize=15, color='navy', ha='right')
plt.figtext(0.73, 0.18, '0-6km SHEAR: ', weight='bold', fontsize=15,
            color='black', ha='left')
plt.figtext(0.88, 0.18, f'{bshear6:.0f~P}', weight='bold',
            fontsize=15, color='blue', ha='right')
plt.figtext(0.73, 0.13, 'SIG TORNADO: ', weight='bold', fontsize=15,
            color='black', ha='left')
plt.figtext(0.88, 0.13, f'{sig_tor[0]:.0f~P}', weight='bold', fontsize=15,
            color='orangered', ha='right')
plt.figtext(0.73, 0.10, 'SUPERCELL COMP: ', weight='bold', fontsize=15,
            color='black', ha='left')
plt.figtext(0.88, 0.10, f'{super_comp[0]:.0f~P}', weight='bold', fontsize=15,
            color='orangered', ha='right')

# Add legends to the skew and hodo
skewleg = skew.ax.legend(loc='upper left')
hodoleg = h.ax.legend(loc='upper left')

# add a quick plot title, this could be automated by
# declaring a station and datetime variable when using
# realtime observation data from Siphon.
plt.figtext(0.45, 0.97, 'OUN | MAY 4TH 1999 - 00Z VERTICAL PROFILE',
            weight='bold', fontsize=20, ha='center')

# Show the plot
plt.show()
代码语言:javascript
复制

实际上只在数据读取做了小改,其他没怎么动

SBCAPE:这个CAPE值考察了从表面上升的空气团的不稳定性。这个值往往高于MLCAPE。 MLCAPE:在大多数风暴追踪时使用的最佳CAPE版本是MLCAPE,因为它往往是地表或近地表上升气流将摄入的最具代表性的空气。描述MLCAPE的最不技术的方法是,它平均了风暴云基以下的CAPE值。 MUCAPE:这项测量发现了测深中最不稳定的空气块,并记录了该值。通常,当有强烈的地表反转时,这是最有用的,因此风暴可能会升高。

以上机翻自https://www.tornadotitans.com/ 还有什么风暴螺旋度、风切变什么就不多介绍了,什么k指数,tt指数想必老师也教过

另外要注意就是单位问题,有什么需要就自行替换

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-01-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 气python风雨 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 导入库
  • 数据读取与转化为pandas
  • 简易版
  • 进阶版
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档