【问题标题】:Matplotlib: How to show complete hourly date values in x axis values?Matplotlib:如何在 x 轴值中显示完整的每小时日期值?
【发布时间】: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)

所以我的问题是:

  1. 如何解决这个空问题?

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

【问题讨论】:

    标签: python datetime matplotlib plot x-axis


    【解决方案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')))
    猜你喜欢
    • 2020-11-28
    • 1970-01-01
    • 2021-08-10
    • 2016-01-03
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    相关资源
    最近更新 更多