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

如何旋转WindRose风玫瑰图并调整图例位置避免图表遮挡

风玫瑰图旋转及图例位置调整方案

旋转风玫瑰使东侧(E)显示在对侧

你当前的代码默认极坐标角度按逆时针增长,正北在顶部时正东位于右侧。要让东侧移动到对侧(左侧),有两种实现方式:

  • 方式1:修改极坐标角度增长方向为顺时针,同步调整刻度标签顺序
  • 方式2:直接对原始风向角度做180度偏移处理,无需修改方向和标签参数

调整图例位置避免重叠

通过bbox_to_anchor参数将图例移动到画布外侧,不会和主图表区域重叠,可根据实际显示效果调整参数值,第一个值控制水平偏移、越大越靠右,第二个值控制垂直偏移、越大越靠上。

修改后完整代码

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

# 初始化风玫瑰轴
ax = WindroseAxes.from_ax()
# 方式1:使用修改角度方向的方案
ax.bar(wind_almaty_angle.angle, wind_almaty_angle.rate, normed=True, bins=np.arange(0, 6, 1), cmap=cm.hot)
# 设置角度增长方向为顺时针
ax.set_theta_direction(-1)
ax.set_theta_zero_location('N')
# 适配顺时针方向修改刻度标签
ax.set_xticklabels(['N', 'NW', 'W', 'SW', 'S', 'SE', 'E', 'NE'], fontsize=14)
# 图例设置为右侧外侧,避免重叠
ax.set_legend(fontsize=12, bbox_to_anchor=(1.3, 1))

plt.show()

如果你选择方式2的角度偏移方案,仅需要修改bar方法传入的角度参数即可,无需调整方向和标签:

adjusted_angle = (wind_almaty_angle.angle + 180) % 360
ax.bar(adjusted_angle, wind_almaty_angle.rate, normed=True, bins=np.arange(0, 6, 1), cmap=cm.hot)
ax.set_xticklabels(['N', 'NE', 'E', 'SE' , 'S', 'SW','W', 'NW'],fontsize=14)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:24:02