如何将风玫瑰图作为子图绘制?风玫瑰图超出子图范围求助
解决风玫瑰图与其他子图共存于同一画布的问题
问题原因
你的代码中直接用rect = [1,1,2,2]创建WindroseAxes,这个矩形坐标是相对于figure的归一化坐标(合法范围为0-1),1到2的取值超出了画布边界,导致风玫瑰图跑到可视区域外,无法和另外两个子图共存。
修正方案
利用subplot2grid预留的第三个子图位置,替换为WindroseAxes,确保风玫瑰图在指定区域内显示:
修正后的代码
from windrose import WindroseAxes import matplotlib.pyplot as plt # 替换为你实际的风向(wd)和风速(ws)数据 wd = [0, 90, 180, 270, 0, 90, 180, 270] ws = [1, 2, 3, 4, 5, 6, 7, 8] fig = plt.figure() # 布局前两个子图 plot1 = plt.subplot2grid((4, 6), (0, 0), rowspan=2, colspan=2) plot2 = plt.subplot2grid((4, 6), (2, 0), rowspan=2, colspan=2) # 先创建第三子图的占位轴,用于获取位置信息 plot3 = plt.subplot2grid((4, 6), (0, 2), rowspan=4, colspan=4) # 绘制常规图表 plot1.plot([1,2,3,4],[3,2,5,6]) plot2.scatter([1,3,5,7],[2,7,3,1]) # 删除占位轴,替换为WindroseAxes fig.delaxes(plot3) pos = plot3.get_position() wa = WindroseAxes(fig, [pos.x0, pos.y0, pos.width, pos.height]) fig.add_axes(wa) # 绘制风玫瑰图 wa.bar(wd, ws, normed=True, opening=0.8, edgecolor='white') plt.show()
关键说明
- 先通过
subplot2grid创建第三子图的占位轴,获取它在figure中的精确位置 - 删除默认的普通Axes,用占位轴的位置创建WindroseAxes,确保风玫瑰图限制在预留的右侧区域
- 避免手动设置超出画布范围的rect参数,复用布局系统分配的位置
内容的提问来源于stack exchange,提问作者vinay reddy
相关产品推荐
相关产品推荐

