gpt4 book ai didi

python - matplotlib 中 Windrose 的子图

转载 作者:太空狗 更新时间:2023-10-30 02:40:21 25 4
gpt4 key购买 nike

我正在尝试用 windrose 的 4 个子图制作一个图形,但我意识到 windrose 只有这样的轴:ax = WindroseAxes.from_ax() 那么,我该如何绘制子图用风玫瑰?

最佳答案

有两种解决方法:

(a) 从矩形创建坐标轴

首先这里已经有一个类似的问题:How to add specific axes to matplotlib subplot?

在那里,解决方案是创建一个矩形 rect,其中包含图中新子图轴的坐标,然后调用 ax = WindroseAxes(fig, rect)

一个更容易理解的例子是

from windrose import WindroseAxes
from matplotlib import pyplot as plt
import numpy as np
ws = np.random.random(500) * 6
wd = np.random.random(500) * 360

fig=plt.figure()
rect=[0.5,0.5,0.4,0.4]
wa=WindroseAxes(fig, rect)
fig.add_axes(wa)
wa.bar(wd, ws, normed=True, opening=0.8, edgecolor='white')

plt.show()

(b) 添加投影

现在创建这个矩形可能会很烦人,如果能够使用 matplotlib 子图功能会好得多。
已提出的一个建议here是将 WindroseAxes 注册为 matplotlib 的投影。为此,您需要编辑 site-packages/windrose 中的文件 windrose.py,如下所示:

  1. 在文件开头包含导入 from matplotlib.projections import register_projection
  2. 然后添加一个名称变量:

    class WindroseAxes(PolarAxes):
    name = 'windrose'
    ...
  3. 最后,在 windrose.py 的末尾添加:

    register_projection(WindroseAxes)

完成后,您可以使用 matplotlib 轴的投影参数轻松创建 windrose 轴:

from matplotlib import pyplot as plt
import windrose
import matplotlib.cm as cm
import numpy as np

ws = np.random.random(500) * 6
wd = np.random.random(500) * 360

fig = plt.figure()
ax = fig.add_subplot(221, projection="windrose")

ax.contourf(wd, ws, bins=np.arange(0, 8, 1), cmap=cm.hot)

ax.legend(bbox_to_anchor=(1.02, 0))
plt.show()

关于python - matplotlib 中 Windrose 的子图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42733194/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com