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

Python中如何对colorbar进行归一化并设置指数形式刻度?

解决方案

你之前使用np.linspace生成的是均匀间隔的刻度,无法实现指数形式的刻度效果,可参考以下两种方案调整:

  • 方案1:保留均匀数值间隔,仅修改刻度显示为指数格式
    仅需在创建colorbar的代码后添加刻度格式化配置即可,修改后代码如下:

    import xarray as xr
    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib.ticker import ScalarFormatter
    
    ds = xr.open_dataset('PL_Era_Tkt.nc')
    
    wp = ds.w.mean(dim=['longitude','latitude']).plot.contourf(x='time',cmap='RdBu',add_colorbar=False,extend='both')
    wpcb = plt.colorbar(wp)
    # 新增指数格式配置
    wpcb.formatter = ScalarFormatter(useMathText=True)
    wpcb.formatter.set_powerlimits((0, 0)) # 强制所有数值使用科学计数法显示
    wpcb.update_ticks()
    
    wpcb.set_label(label='Pa.s${^{-1}}$',size=13)
    plt.gca().invert_yaxis()
    plt.title('Vertical Velocity',size=15)
    plt.show()
    
  • 方案2:使用非均匀的指数间隔刻度(和目标图效果完全匹配)
    需要先自定义指数间隔的色阶,再手动设置colorbar的刻度值,修改后代码如下:

    import xarray as xr
    import numpy as np
    import matplotlib.pyplot as plt
    
    ds = xr.open_dataset('PL_Era_Tkt.nc')
    # 自定义正负对称的指数间隔色阶,可根据需要调整对数区间和分段数
    neg_levels = -np.logspace(-2, 0, 20)[::-1]
    pos_levels = np.logspace(-2, 0, 20)
    levels = np.concatenate([neg_levels, pos_levels])
    
    wp = ds.w.mean(dim=['longitude','latitude']).plot.contourf(x='time',cmap='RdBu',levels=levels,add_colorbar=False,extend='both')
    wpcb = plt.colorbar(wp)
    # 手动设置目标刻度值
    wpcb.set_ticks([-1, -0.1, -0.01, 0, 0.01, 0.1, 1])
    
    wpcb.set_label(label='Pa.s${^{-1}}$',size=13)
    plt.gca().invert_yaxis()
    plt.title('Vertical Velocity',size=15)
    plt.show()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:45:00