代码之家  ›  专栏  ›  技术社区  ›  vicemagui

用Cartopy实现日期等高线的cmap

  •  0
  • vicemagui  · 技术社区  · 6 年前

    我有一系列的tif海冰数据(见其中3个) here )我想在海冰浓度为50%的情况下绘制等高线(见附图)。

    enter image description here

    在这里

    建议?

    0 回复  |  直到 6 年前
        1
  •  1
  •   Denis Sergeev    6 年前

    首先,需要从数据集中提取时间数组。为了这个例子,让我们假设它们是 datetime .

    # necessary imports
    from datetime import datetime
    import matplotlib.colors as mcol
    import matplotlib.cm as mcm
    import matplotlib.dates as mdates
    import matplotlib.pyplot as plt
    import numpy as np
    
    
    # some random dates
    dts = [
        datetime(1991, 5, 6, 0, 0, 0),
        datetime(2000, 1, 1, 0, 0, 0),
        datetime(2015, 1, 15, 12, 34, 56),
        datetime(2020, 12, 3, 4, 5, 6),
    ]
    

    num_dt = [mdates.date2num(dt) for dt in dts]
    

    如果数据集的日期是“纯”数字,则可以跳过此步骤,将其分配给 num_dt :

    num_dt = ds.time.values  # or something like that
    

    那么你应该创建一个 Normalize 具有您选择的颜色映射的对象:

    cmap = plt.get_cmap("viridis")
    cnorm = mcol.Normalize(num_dt[0], num_dt[-1])
    

    ScalarMappable 使用上面的颜色映射和归一化:

    sm = mcm.ScalarMappable(norm=cnorm, cmap=cmap)
    

    最后,当您在数据的时间片上循环时,请使用给定的时间戳来定义颜色:

    for time_stamp in my_times:
        num_time = mdates.date2num(time_stamp)  # or use the numeric value straight away, if time_stamp is a number
        color = sm.to_rgba(num_time)
        contour(data_slice, color=[color])
    

    推荐文章