数据可视化中的数据映射及colorbar设置

数据映射以及colorbar的设置


气象海洋数据在实际应用中,常常需要不等间距的colorbar设置以及显示,本文提供了matlab以及python的数据映射和colorbar设置方法,供参考使用


MatLab版本


% --- 源数据的映射
level = [0,0.1,10,25,50,100,200,250] ;
xx1=level(1:end-1);
xx2=level(2:end);
CC1=0;CC2=length(xx1);
F=WK;
for jj=1:length(xx1)
   F(WK>=xx1(jj)&WK<xx2(jj))=jj - 0.5;
end

% --- colorbar的设置
h=mypcolor(lon(1:2:end),lat(1:2:end),(F.*mask)'); hold on
shading flat
colormap(cmap);
caxis([0 length(level)-1]);


cbar=colorbar('h');
set(cbar,'Ticks',0:length(level)-1,'TickLabels',level) ;

Matlab作图示例
Maltab作图示例

Python版本


import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
import numpy as np
import matplotlib.ticker as ticker
from matplotlib.colors import LinearSegmentedColormap
import scipy.io as sio

def Plot_PRE_Compare24(data, mask,
                     lon=np.arange(114.745, 122.745, 0.01),
                     lat=np.arange(34.295, 38.455, 0.01),
                     cmaps=None, shp_path=None, title=None,
                     **kwargs):

    # ---- data preprocessing ---> mapping
    data = data * mask
    WK = data
    level = np.array([0, 0.1, 10, 25, 50, 100, 200, 250])
    xx1 = level[0:-1]
    xx2 = level[1:]
    CC1 = 0
    CC2 = len(xx1)
    for jj in range(CC2):
        data[np.where((WK >= xx1[jj]) & (WK < xx2[jj]))] = jj


    # --- colormap
    if not cmaps:
        colorslist = np.array(
            [[255., 255., 255.], [165., 243., 141.], [57., 170., 0.], [99., 186., 255.], [0., 0., 254.],
             [254, 217, 0], [255., 0., 254.]]) / 255
        cmaps = LinearSegmentedColormap.from_list('mylist', colorslist, N=7)
    else:
        cmaps = LinearSegmentedColormap.from_list('mylist', cmaps, N=7)

    # --- plotmap
    map = Basemap(llcrnrlon=lon[0], llcrnrlat=lat[0], urcrnrlon=lon[-1], urcrnrlat=lat[-1])
    # map = Basemap(llcrnrlon=114, llcrnrlat=34, urcrnrlon=122, urcrnrlat=38)
    if shp_path:
        map.readshapefile(shp_path, 'shapes', drawbounds=True)

    """显示网格线"""
    plt.xticks([116, 118, 120, 122], fontsize=6)
    plt.yticks([35, 36, 37, 38], fontsize=6)
    map.pcolor(lon, lat, (data * mask).T, cmap=cmaps, vmin=0, vmax=7) # vmin=0, vmax=7

    font = {#'family': 'SimHei',
            'weight': 'normal',
            'size': 8,}
    bar = map.colorbar(location='right', label='PRE [mm/24h]')
    bar.set_label('PRE [mm/24h]', fontdict=font)
    bar.ax.tick_params(labelsize=8)
    tick_locs = [0, 1, 2, 3, 4, 5, 6, 7]
    tick_labels = ['0', '0.1', '10', '25', '50', '100', '200', '250']
    bar.locator = ticker.FixedLocator(tick_locs)
    bar.formatter = ticker.FixedFormatter(tick_labels)
    bar.update_ticks()
    if title:
        fontd = {'fontsize': 8,
                 'fontweight': 'bold',
                 'color': 'red'}
        plt.title(title, fontdict=fontd, loc='left')

Python作图示例
Python作图示例

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值