使用 Matplotlib 制作带有日期的 Hovmöller 图或热图的最简单方法是什么?

问题描述 投票:0回答:1

我尝试查看了很多类似的问题及其答案,但我仍然很难找到一个好的解决方案。在大多数情况下,它似乎适合热图,其中两个轴都是某种数字,而不是像我这样的日期。 Hovmöller 图似乎或多或少是我正在寻找的,但我一直在努力寻找有关生成它们的最简单方法的信息,因为它们本质上似乎只是一种带有分箱时间的热图。当我尝试使用像

hist2d
这样的解决方案时,我得到的错误似乎与一个轴由日期时间组成这一事实有关,即使我按照一个答案的建议将它们首先转换为
numpy.datetime64

本质上,我拥有的是一个日期列表和一个相应的经度列表作为数据点(日期可以在此列表中多次出现,在这种情况下,该日期将有多个经度),我本质上想在至少将经度分类为单度(即,将 0° 到 1° 之间的所有经度放入一个分类器中,依此类推),并且大概我也会将分类器包含多个时间(因为单个日期的碎片会很远)太薄而无法正确表示,因为总共有大约 5.5k 个日期,当然最好有一个可以扩展到更多日期的解决方案)。

我考虑过编写一些代码来手动对它们进行分类,看看是否有效,但是如果有人知道任何适合我正在谈论的内容的简单解决方案,我很想听听。

python matplotlib visualization
1个回答
0
投票

hist2d
尚不直接支持日期时间,但您可以传入从日期派生的浮点数,然后直接告诉 Matplotlib 将它们格式化为日期:

import datetime

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

# Create some random dates and longitudes
rng = np.random.default_rng(seed=42)
dates = [datetime.date(2024, 4, d) for d in rng.integers(low=1, high=31, size=100)]
longitudes = rng.integers(low=20, high=31, size=100)

fig, ax = plt.subplots()

# Plot histogram with dates converted to floats
ax.hist2d(mdates.date2num(dates), longitudes)

# Fortmat x-axis as dates
ax.xaxis.set_major_locator(mdates.AutoDateLocator())
ax.xaxis.set_major_formatter(mdates.AutoDateFormatter(ax.xaxis.get_major_locator()))
fig.autofmt_xdate()

plt.show()

© www.soinside.com 2019 - 2024. All rights reserved.