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

Posted

技术标签:

【中文标题】在 Matplotlib 中显示 X 轴上的所有完整小时【英文标题】:Showing all Full Hours on X-Axis in Matplotlib 【发布时间】:2020-11-28 01:51:07 【问题描述】:

这里是 Python 初学者。我有一个.tsv 文件,其中包含如下数据:

Date         Time        Day     Sales
2020-08-07  17:20:04    Friday   37
2020-08-07  17:30:05    Friday   38
...and so on

我想绘制这个。我试过这个:

from pandas import read_csv
from matplotlib import pyplot
import datetime
import pandas as pd


series = read_csv('data.tsv', sep="\t")
pyplot.figure()


x = pd.to_datetime(series['Time']).dt.time
y = series['Sales']

pyplot.plot(x,y)
pyplot.show()

有效!但是,我想在 x 轴上显示一天中的每个小时。我试过这样做:

times = [datetime.datetime.strptime(str(i), '%H') for i in range(24)]
pyplot.xticks(times)

...但它不起作用。现在,x 轴上的内容似乎很随机(00:00、05:33:20、11:06 ...)

有什么想法吗?

【问题讨论】:

谢谢!我得到:AttributeError: module 'matplotlib.dates' has no attribute 'AutoDateFormatterDateFormatter' 对不起,我不想让人讨厌,但我现在收到TypeError: __init__() missing 1 required positional argument: 'locator' 【参考方案1】:

这是一些示例代码。 AutoDateFormatter() 设置自动格式。 DateFormatter('%H:%M') 将小时:分钟设置为格式。

有关定位器和格式化程序的更多选项,请参阅the docs。

from matplotlib import pyplot as plt
import matplotlib.dates as mdates
import pandas as pd
import numpy as np

times = pd.date_range(start='2020-02-14 20:30', end='2020-02-14 22:20', freq='7min')
series = pd.DataFrame('Time': times,
                       'Sales': 20 + np.random.uniform(-1, 1, len(times)).cumsum())
x = series['Time']
y = series['Sales']

plt.plot(x, y)

plt.gca().xaxis.set_major_locator(mdates.AutoDateLocator())
# plt.gca().xaxis.set_major_formatter(mdates.AutoDateFormatter())
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%H:%M'))

plt.show()

【讨论】:

如果此答案解决了您的问题,您可以考虑使用 upvotig 和/或 accepting 答案。

以上是关于在 Matplotlib 中显示 X 轴上的所有完整小时的主要内容,如果未能解决你的问题,请参考以下文章

使用 Matplotlib 在 x 轴上的月份名称偏移

matplotlib柱状图-老鱼学matplotlib

Matplotlib:图中可点击的内容+新窗口

mpld3 不能正确显示 x 轴上的日期

Matplotlib:在 x 轴上显示选定的日期标签

具有多列的 matplotlib 条形图,x 轴上的日期