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

如何根据自定义数值列表为极坐标图单元格着色(内层圆柱不切片)

解决方案

核心思路

  1. 内层完整环形:直接绘制覆盖360度的环形,避免拆分切片
  2. 数值关联渐变着色:利用Matplotlib颜色映射,将自定义数值归一化后映射为蓝到红的渐变色彩

完整代码

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

# 自定义参数
layer_height = 10 / 3  # 每层高度
n_angles = 30          # 外层/中间层的切片数量
# 自定义数值列表:[内层数值, 中间层30个数值, 外层30个数值]
values = [np.random.uniform(0, 10) for _ in range(1 + n_angles * 2)]

# 数值归一化 + 蓝到红渐变映射
norm = Normalize(vmin=np.min(values), vmax=np.max(values))
cmap = plt.cm.RdBu_r  # RdBu_r实现蓝到红,RdBu默认是红到蓝

# 创建极坐标图
fig = plt.figure()
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8], polar=True)

# 绘制内层完整环形
inner_val = values[0]
ax.bar(0, layer_height, width=2*np.pi, bottom=0,
       color=cmap(norm(inner_val)), edgecolor=cmap(norm(inner_val)))

# 绘制中间层切片
for i in range(n_angles):
    angle = i * 2 * np.pi / n_angles
    val = values[1 + i]
    ax.bar(angle, layer_height, width=2*np.pi/n_angles, bottom=layer_height,
           color=cmap(norm(val)), edgecolor=cmap(norm(val)))

# 绘制外层切片
for i in range(n_angles):
    angle = i * 2 * np.pi / n_angles
    val = values[1 + n_angles + i]
    ax.bar(angle, layer_height, width=2*np.pi/n_angles, bottom=2*layer_height,
           color=cmap(norm(val)), edgecolor=cmap(norm(val)))

# 轴样式设置
plt.ylim(0, 10)
ax.set_yticks([])
# 添加颜色条展示数值与色彩对应关系
sm = plt.cm.ScalarMappable(norm=norm, cmap=cmap)
sm.set_array([])
fig.colorbar(sm, ax=ax, shrink=0.8)

plt.show()

关键细节说明

  • 内层环形通过width=2*np.pi实现360度完整覆盖,不会被拆分
  • Normalize将自定义数值映射到0-1区间,确保颜色渐变均匀匹配数值范围
  • 颜色条用于直观展示数值与色彩的对应关系,方便解读热力效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 22:41:16