Python 中 X 轴上的小时刻度

时间:2021-04-28 17:28:53

标签: python matplotlib

使用 Python 3.8.5

问题:CSV 文件包含一列日期时间数据(10 分钟频率,格式为 dd/mm/YYYY HH:MM),数据类型称为“对象”。第二列 (wave_height) 是简单的数值数据。我只想在 y 轴上绘制数字数据,x 轴显示数小时的刻度。在我制作绘图的那一刻,它显示了所有无法读取的刻度。

目前采取的行动:我找到了关于 major_locatormajor_formatter 的文献。我已经尝试了很多方法来尝试让它只为 x 个刻度做 1 小时的间隔,但它一直试图绘制 2613 个刻度。我发现带有示例代码以绘制每小时刻度的网页似乎不起作用,即使我尝试他们的代码以查看是否是我在翻译!

示例数据:

DateTime,Date,Time,Wind_Direction,Effective Fetch,Wind_Speed,wave_height
01/10/2012 00:00,01/10/2012,00:00:00,228,510,1.976,0.0299
01/10/2012 00:10,01/10/2012,00:10:00,231,516,1.389,0.0207
01/10/2012 00:20,01/10/2012,00:20:00,239,532,1.759,0.0269
01/10/2012 00:30,01/10/2012,00:30:00,235,524,2.279,0.0352
01/10/2012 00:40,01/10/2012,00:40:00,238,530,1.983,0.0305
01/10/2012 00:50,01/10/2012,00:50:00,233,520,1.733,0.0262
01/10/2012 01:00,01/10/2012,01:00:00,236,526,2.02,0.031
01/10/2012 01:10,01/10/2012,01:10:00,234,522,2.071,0.0318
01/10/2012 01:20,01/10/2012,01:20:00,236,526,2.296,0.0356
01/10/2012 01:30,01/10/2012,01:30:00,244,542,2.061,0.0322
01/10/2012 01:40,01/10/2012,01:40:00,245,544,1.714,0.0265
01/10/2012 01:50,01/10/2012,01:50:00,236,526,1.74,0.0265
01/10/2012 02:00,01/10/2012,02:00:00,234,522,1.475,0.0222
01/10/2012 02:10,01/10/2012,02:10:00,237,528,0.228,0.0031
01/10/2012 02:20,01/10/2012,02:20:00,237,528,0,0.0
01/10/2012 02:30,01/10/2012,02:30:00,229,512,0.223,0.003
01/10/2012 02:40,01/10/2012,02:40:00,227,510,2.01,0.0304
01/10/2012 02:50,01/10/2012,02:50:00,235,524,1.541,0.0233
01/10/2012 03:00,01/10/2012,03:00:00,231,516,1.685,0.0254
01/10/2012 03:10,01/10/2012,03:10:00,234,522,2.245,0.0346
01/10/2012 03:20,01/10/2012,03:20:00,235,524,2.915,0.0457
01/10/2012 03:30,01/10/2012,03:30:00,229,512,2.971,0.0461
01/10/2012 03:40,01/10/2012,03:40:00,231,516,3.119,0.0488
01/10/2012 03:50,01/10/2012,03:50:00,228,510,2.915,0.0451
01/10/2012 04:00,01/10/2012,04:00:00,229,512,3.357,0.0525

到目前为止的代码:

data = pd.read_csv('WaveHeightCalc.csv', sep = ',')

x = data['DateTime']
y = data['wave_height']

import matplotlib.pyplot as plt
import matplotlib.dates as mdates

fig, ax = plt.subplots()
ax.plot(x,y,"r--")
ax.set_xlabel("Date and Time")
ax.set_ylabel("Wave Height (m)")
ax.set_title('Wave Height Over Time')
ax.xaxis.set_major_locator(mdates.HourLocator(byhour= None, interval=1, tz=None))
ax.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M'))
ax.legend("Wave Height") #this also just shows the red line and the letter "W"
plt.show()

我对此不知所措,在 R 中也很容易,但我必须使用 Python。我还尝试将我的数据转换为字符串,以查看使用 numpy np.array 是否有任何作用。

1 个答案:

答案 0 :(得分:1)

使用 to_datetime() 手动将 data.DateTime 转换为真正的 datetime

data = pd.read_csv('WaveHeightCalc.csv')
data.DateTime = pd.to_datetime(data.DateTime)

或在 read_csv() 期间自动使用 parse_dates

data = pd.read_csv('WaveHeightCalc.csv', parse_dates=['DateTime'])

然后日期将按预期显示:

output with datetime dates