Matplotlib:如何在 x 轴值中显示完整的每小时日期值?

Posted

技术标签:

【中文标题】Matplotlib:如何在 x 轴值中显示完整的每小时日期值?【英文标题】:Matplotlib: How to show complete hourly date values in x axis values? 【发布时间】:2022-01-23 07:31:00 【问题描述】:

我正在尝试使用 x 轴作为每小时数据创建图(步长 = 1 小时)。尽管我将 x 数据定义为包含每小时数据的数组,但我得到了 00:00 的 x 值(见屏幕截图)。

import pandas as pd
import matplotlib.mdates as mdates

range_hour = pd.date_range(start='2021-01-01', periods=24, freq='H')
xdata_hour = range_hour.hour.values
h_fmt = mdates.DateFormatter('%H:%M')
plot(xdata_hour, ydata)
ax.xaxis.set_major_formatter(h_fmt)

所以我的问题是:

    如何解决这个空问题?

    如何获得一小时的步数? x 值应代表一天的小时数 [00:00, ..., 23:00]。

【问题讨论】:

【参考方案1】:

如果单个日期每小时值尝试使用ConciseDateFormatter,它会尝试

找出用于日期的最佳格式,并使其尽可能紧凑,但仍要完整。

您还可以使用AutoDateLocator 中的maxticks 参数定义要显示多少小时值。请参阅下面的示例

完整示例

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

# Generate 24 hour data
base = datetime.datetime(2021, 1, 1)
dates = [base + datetime.timedelta(hours=(i)) for i in range(24)]

# Generate 24 random values
y = np.random.choice(range(10), 24)

fig, ax = plt.subplots(1, 1, figsize=(14, 6))

# Change tickvalues to show all 24 hour values or less values
locator = mdates.AutoDateLocator(minticks=12, maxticks=24)
formatter = mdates.ConciseDateFormatter(locator)
ax.xaxis.set_major_locator(locator)
ax.xaxis.set_major_formatter(formatter)

ax.plot(dates, y)

# Set x limit values to same day
ax.set_xlim((np.datetime64('2021-01-01 00:00'), np.datetime64('2021-01-01 23:59')))

【讨论】:

非常感谢@Miguel!它完美地工作。我还有一个问题,可以去掉右下角的月份和左边的年份吗? 是的,使用 show_offset formatter = mdates.ConciseDateFormatter(locator, show_offset=False) 对于文字的右边限制是可以改变的,例如axs.set_xlim((np.datetime64('2021-01-01 00:01'), np.datetime64('2021-01-01 23:59')))

以上是关于Matplotlib:如何在 x 轴值中显示完整的每小时日期值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在剑道图表的顶部而不是底部显示 x 轴值

如何在 matplotlib 中根据 x 轴更改直方图颜色

在 Matplotlib 中显示 X 轴上的所有完整小时

Matplotlib sharex 上具有不同 x 值的数据?

如何防止在 Python matplotlib 图中将数字更改为指数形式

如何获取echarts点击点的X轴和Y轴值