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

Python contourf函数Gamma校正增强低值区并保留原值色标方案咨询

实现方法

核心是直接使用Matplotlib内置的PowerNorm实现Gamma数值映射,不需要手动转换原始数据,Colorbar会自动显示原始数值,同时满足你用contourf的需求。

完整修改后代码

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

# 此处保留你读取DoP矩阵的原有代码

# --------------------------自定义参数--------------------------
gamma = 0.3  # 取值小于1,可根据显示效果调整,值越小低值区域差异越突出
vmin = 0
max_DoP = DoP.max()
vmax = max_DoP

# 生成Gamma变换空间下均匀分布的levels,逆变换回原始值作为等高线阈值
# 保证低值区域等高线更密,符合突出低值的需求
y_levels = np.linspace(vmin**gamma, vmax**gamma, 100)
x_levels = y_levels ** (1/gamma)

# --------------------------坐标处理--------------------------
umu = [0.99999,0.99452,0.98481,0.96593,0.93969,0.90631,0.86603,0.81915,0.76604,0.70711,
       0.64279,0.57358,0.50000,0.42262,0.34202,0.25882,0.17365,0.08716,0.00000]    
umu = umu[::-1]
umu = np.multiply(umu,-1)
umu = np.arccos(umu)  
umu = np.pi - umu 

phi = np.arange(0,375,15)
phi = phi * np.pi / 180

# --------------------------绘图--------------------------
fig = plt.figure(figsize=(8,8))
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8], polar=True)
# 核心修改:指定norm参数为PowerNorm,levels用原始值空间的非均匀阈值
contourf_obj = ax.contourf(phi, umu * 180/np.pi, DoP, cmap='jet', levels=x_levels, 
                            norm=colors.PowerNorm(gamma=gamma, vmin=vmin, vmax=vmax))
plt.rc('font', size=32)
ax.grid(linewidth=2)
ax.xaxis.set_tick_params(pad=28)
# 直接传入contourf对象,Colorbar自动显示原始数值
plt.colorbar(contourf_obj, orientation="vertical", fraction=0.09, anchor=(2.0,0.0))
plt.savefig('DoP.png', bbox_inches='tight') # 加bbox_inches避免Colorbar被截断
plt.show()

注意事项

  • 已修正原有代码的两处bug:max_DoP定义顺序错误、phi重复转弧度的问题,可直接运行
  • 若不需要等高线在Gamma空间均匀分布,仅需要颜色映射做Gamma变换,可删除自定义x_levels的代码,直接用原始均匀levels,仅保留norm参数即可
  • gamma推荐在0.2~0.6区间调试,找到最符合你数据的低值突出效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 13:48:03