【发布时间】:2018-01-15 17:33:24
【问题描述】:
此代码完全按照我想要的方式绘制数据,x 轴为日期,y 轴为时间。但是我希望 y 轴显示每小时的时间(例如,00、01、... 23)和 x 轴以一定角度显示每个月的开始,因此没有重叠(实际数据是使用跨度超过一年)并且只有一次,因为此代码重复相同的月份。这是如何实现的?
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
data = ['2018-01-01 09:28:52', '2018-01-03 13:02:44', '2018-01-03 15:30:27', '2018-02-04 11:55:09']
f, ax = plt.subplots()
data = pd.to_datetime(data, yearfirst=True)
ax.plot(data.date, data.time, '.')
ax.set_ylim(["00:00:00", "23:59:59"])
days = mdates.DayLocator()
d_fmt = mdates.DateFormatter('%Y-%m')
ax.xaxis.set_major_locator(days)
ax.xaxis.set_major_formatter(d_fmt)
plt.show()
更新:这修复了 x 轴。
# Monthly intervals on x axis
months = mdates.MonthLocator()
d_fmt = mdates.DateFormatter('%Y-%m')
ax.xaxis.set_major_locator(months)
ax.xaxis.set_major_formatter(d_fmt)
但是,这种修复 y 轴的尝试只会使其空白。
# Hourly intervals on y axis
hours = mdates.HourLocator()
t_fmt = mdates.DateFormatter('%H')
ax.yaxis.set_major_locator(hours)
ax.yaxis.set_major_formatter(t_fmt)
我正在阅读这些文档,但不理解我的错误:https://matplotlib.org/api/dates_api.html, https://matplotlib.org/api/ticker_api.html
【问题讨论】:
-
@ImportanceOfBeingErnest:我不知道如何格式化 y 轴以显示每小时的每小时。至于 x 轴,如果您运行脚本,它会一次又一次地重复同一个月。必须有办法防止这种情况发生,所以它每个月只显示一次。
-
对于每月刻度,使用
MonthLocator,对于每小时刻度,使用HourLocator。 -
@ImportanceOfBeingErnest:我让 x 轴正确显示。仍然停留在 y 轴上。查看更新。
-
现在我们正在取得进展。题中有明显问题,可以回答。
标签: python python-3.x pandas matplotlib plot