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_offsetformatter = 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 轴值中显示完整的每小时日期值?的主要内容,如果未能解决你的问题,请参考以下文章
Matplotlib sharex 上具有不同 x 值的数据?