【问题标题】:Plotting a wind rose in Python using Windrose Library使用 Windrose 库在 Python 中绘制风玫瑰图
【发布时间】:2019-07-05 14:10:54
【问题描述】:

我有风数据,包括风速和风向。

但是,我的风向是逆时针定义的。意思是,我的数据的 45 度实际上是 NW。

有没有机会在 Python 中使用 Windrose 来改变这一点?

我有以下代码来绘制 Windrose:

from windrose import WindroseAxes
import matplotlib.pyplot as plt

theta = [0, 60, 120, 180, 240, 300]
speed = [10, 0, 10, 40, 50, 40]

ax = WindroseAxes.from_ax()
ax.bar(theta, speed)
plt.show()

【问题讨论】:

  • 您的代码示例应该是完整的 MVP。它不会按原样运行,因为缺少导入和变量定义。要运行它,我目前被困为cm.autumn。这是什么?

标签: python windrose


【解决方案1】:

风玫瑰的方向由theta 列表决定。如果 90° 不在您希望的一侧,您可以将所有 theta 角转换为相反的角度,从而创建原始图像的镜像。

假设您的原始代码如下。

from windrose import WindroseAxes                                                                                                                                                                                                                                                                                                                                                                                                                                                            
import matplotlib.pyplot as plt                                                                                                                                                                                                                                                                                                                                                                                                                                                              

theta = [0, 90]                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
speed = [10, 10]                                                                                                                                                                                                                                                                                                                                                                                                                                                                             

ax = WindroseAxes.from_ax()                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
ax.bar(theta, speed)                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
plt.show()

这会向您显示一个在东边带有条形的图表,而您希望它在西边(或相反)。

如果取相反的角度,则交换图形。以下代码将满足您的目的。

from windrose import WindroseAxes
import matplotlib.pyplot as plt

theta = [0, 90]
theta = [360 - x for x in theta] # Take the opposite angle
speed = [10, 10]

ax = WindroseAxes.from_ax()
ax.bar(theta, speed)
plt.show()

【讨论】:

  • 嗨,我的 theta 数据不是从最小值到最大值排序的。它可能看起来像 theta = [240, -50, 60, 345, -15]。因此,我确实必须更改定义,而只是交换 theta 并没有帮助。
  • 你能用theta的实际定义更新你的问题吗?我想像theta = map(lambda x: 360-x, theta) 这样的东西可能会起作用,如果我能很好地理解你的目标。
  • 嗨,很遗憾我无法发布数据。但它被定义为 0 度是北,然后是逆时针。所以 90 度是 W 等。数据是 28 000 个数据点,包括风速和风向。
  • 好的,知道了。很奇怪,在我的安装上没有任何修改。 90°是东。无论如何,我编辑我的答案以反映我对您的问题的理解。
  • 感谢您的帮助!我还有一个关于风玫瑰的问题。你知道为什么我的半径标签显示的是风速而不是百分比吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-09
  • 1970-01-01
相关资源
最近更新 更多