首先,需要从数据集中提取时间数组。为了这个例子,让我们假设它们是
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])