将 cmap 与 Cartopy 一起用于日期轮廓
Using cmap for date contours with Cartopy
我有一系列 tif 海冰数据(见其中 3 个 here),我想在海冰浓度恒定值为 50% 的地方绘制等高线(见附图)。
.
每条红色虚线代表上述 1979 年至 2020 年之间每年 4 月的 50% 值。我想使用颜色图或类似的东西代替所有颜色相同的颜色,其中每条线由一种不同的颜色,这又与它所属的年份有关。最终,使用颜色条,reader 可以识别这些线条多年来的变化情况。您可以找到此图的代码 here.
建议?
提前致谢。
首先,您需要从数据集中提取时间数组。为了这个例子,我们假设它们的类型是 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 = mcm.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)
plt.contour(data_slice, colors=[color])
希望这对您有所帮助。
我有一系列 tif 海冰数据(见其中 3 个 here),我想在海冰浓度恒定值为 50% 的地方绘制等高线(见附图)。
每条红色虚线代表上述 1979 年至 2020 年之间每年 4 月的 50% 值。我想使用颜色图或类似的东西代替所有颜色相同的颜色,其中每条线由一种不同的颜色,这又与它所属的年份有关。最终,使用颜色条,reader 可以识别这些线条多年来的变化情况。您可以找到此图的代码 here.
建议?
提前致谢。
首先,您需要从数据集中提取时间数组。为了这个例子,我们假设它们的类型是 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 = mcm.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)
plt.contour(data_slice, colors=[color])
希望这对您有所帮助。