使用matplotlib在一维图表中绘制风向量(或风倒钩)

时间:2017-08-22 18:39:03

标签: python matplotlib

随着时间的推移,我有一个包含风量和风向的阵列。我想在同一图表上绘制它们,在中间显示带有线和风向的风量作为矢量(或风倒钩)。我以前用其他绘图软件做过这个,但这次我需要在matplotlib中做。

以下是使用风倒钩所需图表的参考资料

reference plot

3 个答案:

答案 0 :(得分:1)

我调整了 igrolvr 的答案,我认为看起来很漂亮

example

obs_times = pd.to_datetime(debertWeatherStation['Date/Time (LST)'])
wind_speed = debertWeatherStation['Wind Spd (km/h)']
wind_direction = debertWeatherStation['Wind Dir (10s deg)']*10.0

plt.figure(figsize=(14,8))
ax1 = plt.subplot(2, 1, 1)
plt.plot(obs_times,wind_speed,'-b',alpha=0.6)
plt.setp(ax1.get_xticklabels(), visible=False)
plt.grid()
plt.title("Wind Speed")
ax2 = plt.subplot(2, 1, 2,sharex=ax1)
arrow_scaler = 1
colors = plt.cm.jet(np.linspace(wind_speed.min(),wind_speed.max(), len(wind_speed)))
for i in range(0,len(obs_times),1):
    u = arrow_scaler*-1*np.sin((np.pi/180)*(wind_direction[i]))
    v = arrow_scaler*-1*np.cos((np.pi/180)*(wind_direction[i]))
    ax2.arrow(obs_times[i], 0, u, v, fc=colors[int(wind_speed[i])], ec='k', 
              head_width=0.2, head_length=0.5, width=0.2, length_includes_head=True, 
              alpha=0.6)
plt.ylim(-1.5,1.5)
plt.grid()
plt.title("Wind Direction")

答案 1 :(得分:0)

我相信quiver - as in this example - 适合您的情况。 你只需要定义向量,而不是矩阵。 请遵循示例代码:

import matplotlib.pyplot as plt
import numpy as np
from numpy import ma

X=np.arange(0, 2 * np.pi, .2)
Y=np.ones(X.shape)
U= np.cos(X)
V= np.sin(X)
plt.figure()
plt.plot(X,X,'--')
Q = plt.quiver(X, Y, Y, Y, units='width') 
Q = plt.quiver(X, Y-2, U, V, units='width')
plt.show()

给出了这个结果

Quivers

答案 2 :(得分:0)

我设法使用matplotlib的arrow功能进行绘图。棘手的部分是我的风向是气象常规(0˚= N,90˚= E,180˚= S,270˚= W),所以我需要计算u和{{1}相应的组件。

vobs_timeswind_speed是包含观察时间和风数据的数组,绘图代码如下:

wind_direction

这给出了输出(是的,我的数据很吵,很好):

output