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

Python:基于sleep_time与ahi的极坐标柱状图颜色映射问题

极坐标图颜色与颜色条问题修复方案

问题分析

  • 颜色映射逻辑错误:当前用np.linspace(0,100, len(ahi))生成颜色值,未关联ahi的实际数值,导致颜色和ahi指标不匹配
  • 颜色条创建方式错误:plt.colorbar(ahi)无法直接生成对应颜色条,需要基于颜色映射规则和数据范围创建ScalarMappable对象
  • 图片保存顺序错误:plt.show()之后调用plt.savefig()会得到空白图,因为show()会关闭并释放画布资源

修复后完整代码

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.cm import ScalarMappable
from matplotlib.colors import Normalize

categories = ['Right', 'Supine', 'Left', 'Prone']
sleep_time = [251.5, 40, 130, 15.5]
ahi = [12.5, 65.6, 8.2, 0.0]

angles = np.linspace(0, 2*np.pi, len(categories), endpoint=False)

fig, ax = plt.subplots(figsize=(8, 8), subplot_kw=dict(projection='polar'))

# 归一化ahi数值,适配colormap的0-1取值范围
norm = Normalize(vmin=np.min(ahi), vmax=np.max(ahi))
# 根据ahi实际值生成对应颜色
colors = plt.cm.viridis_r(norm(ahi))

# 绘制sleep_time对应柱子
ax.bar(angles, sleep_time, width=1.0, align='center', alpha=0.5, label='睡眠时长')
# 绘制关联ahi颜色的柱子
ax.bar(angles, ahi, width=0.4, align='edge', alpha=0.8, color=colors, label='AHI指数')

ax.set_xticks(angles)
ax.set_xticklabels(categories)
ax.legend()

# 创建匹配的颜色条
sm = ScalarMappable(norm=norm, cmap=plt.cm.viridis_r)
sm.set_array([])
colorbar = fig.colorbar(sm, ax=ax)
colorbar.set_label('AHI指数')
# 根据ahi实际范围调整刻度,原刻度超出最大值,按需修改
colorbar.set_ticks([0, 30, 60])

# 先保存再显示,避免空白图
plt.savefig('position_vs._ahi.png', dpi=100, bbox_inches='tight')
plt.show()

关键修复说明

  • 用Normalize将ahi的实际数值范围映射到颜色映射所需的0-1区间,确保颜色和ahi值一一对应
  • 通过ScalarMappable关联归一化规则与颜色映射,正确生成对应颜色条
  • 调整plt.savefig()到plt.show()之前,解决空白图问题
  • 优化柱子透明度和标签,提升可视化可读性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 20:55:13