如何修改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
相关产品推荐
相关产品推荐

