在 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 轴上的所有完整小时的主要内容,如果未能解决你的问题,请参考以下文章