Python 使用windrose轴跨多个子地块控制图例

Python 使用windrose轴跨多个子地块控制图例,python,matplotlib,legend,axes,Python,Matplotlib,Legend,Axes,我不知道如何使图例不与子图中的数字重叠(参见下图)。问题是,我的斧子很复杂,因为它们来自一朵风车。要获取轴,请执行以下操作: 1) 我已从下载了windrose.py 2) 我将windrose.py复制到与python脚本example.py相同的路径中 3) 我更改了windrose.py,以便它能够根据中的步骤执行子绘图。这些步骤是将WindroseAxes作为matplotlib的投影。我编辑了windrose.py文件: 3a)包括 import from matplotlib.pro

我不知道如何使图例不与子图中的数字重叠(参见下图)。问题是,我的斧子很复杂,因为它们来自一朵风车。要获取轴,请执行以下操作:

1) 我已从下载了windrose.py

2) 我将windrose.py复制到与python脚本example.py相同的路径中

3) 我更改了windrose.py,以便它能够根据中的步骤执行子绘图。这些步骤是将WindroseAxes作为matplotlib的投影。我编辑了windrose.py文件:

3a)包括

import from matplotlib.projections import register_projection 
在文件的开头

3b)然后添加名称变量:

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

register_projection(WindroseAxes)
完成后,可以使用matplotlib轴的投影参数轻松创建windrose轴

4) 现在我运行下面的脚本(我的真实脚本示例)

理想情况下,我希望创建一个具有所有子图的最大/最小值的图例,因为它们都是相同的单位。该图例必须是各子地块中相同值的每个子地块的相应颜色(例如,与所有子地块相关的单个普通图例)。在真实的脚本中会有6个子情节,但现在这里有2个子情节说明了这一点


这很容易修复。要仅打印一个图例,请注释或删除打印第一个图例的位置。要将图例移出绘图,请使用带有一些逻辑位置的bbox_to_anchor=()。请参阅下面的示例,了解适用于此示例的示例

import numpy as np
import matplotlib.pyplot as plt
from windrose_subplot import WindroseAxes

wind_speeds1 = np.array([12,10,13,15])
wind_dirs1 = np.array([60,76,32,80]) # in degrees

wind_speeds2 = np.array([23,12,10,8])
wind_dirs2 = np.array([23,45,29,13])

fig = plt.figure()
ax1 = fig.add_subplot(231,projection='windrose')
ax1.bar(wind_dirs1,wind_speeds1,normed=True,opening=0.8,edgecolor='white')
ax2 = fig.add_subplot(232,projection='windrose')
ax2.bar(wind_dirs2,wind_speeds2,normed=True,opening=0.8,edgecolor='white')

# ax1.legend()
ax2.legend(bbox_to_anchor=(1.2 , -0.1))
plt.tight_layout()
plt.show()

但是,请注意,bbox_to_锚定依赖于图例来源的轴,因此

ax1.legend(bbox_to_anchor=1.2, -0.1))
#ax2.legend()
将在第二个轴下方显示图例:


有关如何控制图例的位置,请参见。如果
ax.legend(loc='best')
在许多情况下都能很好地工作,那么
legend()
方法也会接受loc参数。我不知道这对winrose是否有帮助是的我不能对winrose Axes这样做有人能解释我问题的否决票吗?
ax1.legend(bbox_to_anchor=1.2, -0.1))
#ax2.legend()