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

如何修改Python中图表色条的数值范围并与色段对齐?

解决UV指数图表色条与分段颜色对齐问题

问题核心

你当前用随机数据生成色条,导致色条范围无法和axhspan定义的UV指数分段(0-2.5、2.5-5.5、5.5-7.5、7.5-10.5、10.5-16)对应,需要直接基于UV的分段规则创建色条,而非依赖随机数据。

修改后的完整代码

import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap, BoundaryNorm
import numpy as np

# 假设datosg和div是已定义的变量
# x_v = datosg["Hour"]+div
# y_v = datosg["UV Index"]

fig, ax= plt.subplots(figsize = (7,7))

# 绘制UV指数曲线(保留你的原有代码)
# ax.plot(x_v, y_v, color = "green")
ax.set_xlim(7, 19)
ax.grid()
# 定义UV分段的区间和对应颜色
uv_bounds = [0, 2.5, 5.5, 7.5, 10.5, 16]
uv_colors = ['green', 'blue','red', 'yellow', 'pink']
# 绘制水平颜色分段
for i in range(len(uv_bounds)-1):
    ax.axhspan(uv_bounds[i], uv_bounds[i+1], facecolor=uv_colors[i], alpha=0.7)
ax.margins(0)

# 创建离散的颜色映射和归一化规则
cMap = ListedColormap(uv_colors)
norm = BoundaryNorm(uv_bounds, cMap.N)

# 创建色条:不需要依赖heatmap,直接用ScalarMappable
sm = plt.cm.ScalarMappable(norm=norm, cmap=cMap)
sm.set_array([])  # 不需要实际数据,只用来生成色条

# 添加色条轴并调整位置(参数:[左, 下, 宽, 高])
cbar_ax = fig.add_axes([0.92, 0.125, 0.03, 0.755])
cbar = plt.colorbar(sm, cax=cbar_ax, orientation="vertical", boundaries=uv_bounds)

# 设置色条的标签和刻度
cbar.set_ticks([(uv_bounds[i] + uv_bounds[i+1])/2 for i in range(len(uv_bounds)-1)])
cbar.set_ticklabels(['Bajo','Medio','Alto','Muy Alto','Extremo'])

plt.show()

关键修改点

  • 移除随机数据依赖:用ScalarMappable结合BoundaryNorm直接基于UV分段规则创建色条,不再需要pcolor生成的随机热图。
  • 对齐分段区间:将axhspan的区间和色条的BoundaryNorm边界统一为uv_bounds列表,确保颜色分段完全对应。
  • 简化标签设置:通过计算区间中点设置色条刻度,直接用set_ticklabels添加文本标签,替代原有的循环文本绘制方式,更简洁且对齐准确。
  • 调整色条尺寸:修改色条轴的宽度参数(原0.2改为0.03),让色条更贴合目标图的样式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 15:45:29