You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将风玫瑰图作为子图绘制?风玫瑰图超出子图范围求助

解决风玫瑰图与其他子图共存于同一画布的问题

问题原因

你的代码中直接用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()

关键说明

  1. 先通过subplot2grid创建第三子图的占位轴,获取它在figure中的精确位置
  2. 删除默认的普通Axes,用占位轴的位置创建WindroseAxes,确保风玫瑰图限制在预留的右侧区域
  3. 避免手动设置超出画布范围的rect参数,复用布局系统分配的位置

内容的提问来源于stack exchange,提问作者vinay reddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 07:47:21