在matplotlib中绘制地转风图

时间:2015-07-03 05:02:05

标签: python matplotlib plot

我正在完成一项任务,教授如何使用Python使用matplotlib进行绘图和标注。科学或数学不是我的背景。我已经给出了计算地转风的公式,我们将绘制它(在y轴上)与x轴上的纬度。

我知道如何绘制给出x和y。除此之外,由于我缺乏该领域的背景,这个公式对我来说没有意义。

该公式是地转风公式。因为我所拥有的只是一张图片而且我需要10个代表来发布图像,所以我只关注我给出的希腊字母。

例如,我得到了

r'$x^{10}$'
r'$R_^{final}$'
r'$alpha^{\eta}$' 

前两个是上标和下标。我明白了但是这对于我不知道的公式计算有何帮助。

我也被赋予了公式中的值。对操作顺序的解释会有所帮助。

g0=9.81 ms-­‐2;
ΔZ=60m;
Δn=2x10^5m;
and
f=2Ωsin(φ)

我的问题是如何将上面的值放入公式中,然后在matplotlib中绘制它们?它和x和y一样容易吗?

到目前为止完成的绘图示例:

x = arange(1, 100, 1)
y1 = 2.0*np.sqrt(x)
y2 = 3.0*x**(1.0/3.0)
plt.plot(x, y1)
plt.plot(x, y2)

对不起,我是新来的。

geostrophic wind formula

2 个答案:

答案 0 :(得分:2)

jclark754's answer中的物理解释很好。也请看wiki page on Geostrophic wind

我猜,

$\Delta n$是你的向北距离。我在下面称之为dy,以便澄清。此外,您是否应该g为负(z轴向上)是一个问题。我这样做了。

对于代码,您需要注意np.sin期望弧度而非度数。

如果您使用NumPy arrays而不是列表,则不需要所有这些列表推导,并且配方变得更简单,更接近公式:

import matplotlib.pyplot as plt ; plt.style.use('ggplot')
import numpy as np

# define the parameters
g = -9.81 # m/s^2
dZ = 60 # m
dx = 2e5 # m
omega = 7.2921e-5 # rad/s
phi = np.linspace(10,40) # deg
f = 2 * omega * np.sin(np.radians(phi)) # coriolis frequency, s^-1

# compute geostrophic wind, x-component
u_g = -1. * g/f * dZ/dx

# plot phi vs V_g
fig, ax = plt.subplots()
ax.plot(phi, u_g)
ax.set_xlabel('latitude (degrees)')
ax.set_ylabel('geostrophic wind, y-component (m/s)')
plt.show()

geostrophic wind as a function of latitude

该图显示了在不同纬度地区由恒定的地转高度梯度(dZ/dx = 60 m / 2e5 m)和科里奥利效应产生的地转风。

从物理直觉来看,我发现奇怪的是,当你靠近赤道时速度会增加,即使科里奥利效应对极点最强。但话又说回来,科里奥利效应不是一种力量,而是一种平衡效应,阻碍了压力梯度力中所包含的势能的释放。

答案 1 :(得分:1)

所以我相信你想要展示的等式是地转风方程式: geostrophic wind eq

是吗?如果是这样,它是气象学中较简单的方程之一,我很乐意解释!

Vg 是地转风,它是由科里奥利效应和压力梯度力之间的平衡产生的理论风。这是一种理想化的风,在自然界中并不存在。

g0 f 是重力和科里奥利参数。科里奥利参数是考虑科里奥利力所需的必要校正。

grad(h) Z 只是每个纬度的高度梯度。在你的情况下,你提供60米作为Z,我不知道Δn是什么。也许你的导师说这个变化是每2x10 ^ 5米60米?我会假设情况就是这样。

所以只计算在科罗拉多州丹佛市的wolfram alpha中的纬度(40度),我得到每秒31.39米,这是一个合理的数字。

让我们尝试绘制它:

import matplotlib.pyplot as plt
import numpy as np

# Create a list of latitudes but exclude the equator because sin(0) is 0
lat_list = [i for i in range(-90, 91) if i != 0]

# Create a list of coriolis values
cor_list = [2 * 7.292e-5 * np.sin(i) for i in lat_list]

# Create a list of geostrophic winds
geo_wind = [(9.81 / i) * (60.0 / 200000.0) for i in cor_list]

# Plot the geostrophic winds on a line 
# Make a new plot, with lat as x and wind as y. 'r--' is a red dashed line
plt.plot(lat_list, geo_wind, 'r--')
# set the axis range
plt.axis([-90, 90, min(geo_wind), max(geo_wind)])
# show the plot
plt.show()

会给你以下图表,其中纬度是x轴,风速是y轴: enter image description here

奇怪的是,图表(以及打印geo_wind列表)显示一些风值计算超过100米/秒,在某些情况下超过1000米/秒。我不确定为什么现在就是这样......现在有点晚了!所以逻辑是正确的,我只是检查python如何计算风速......我认为它与科学记数法和浮点数有关。

无论如何,我应该注意到我将上面的列表写成列表推导。如果这有点过头了,那没关系。查看此link以获得有关它们与常规列表/ for循环的比较的详细说明。我希望这能让你有一个良好的开端。快乐的小路!