0

我需要有关以下问题的帮助:我正在尝试在 matplotlib 笔记本模式下使用 jupyter 笔记本绘制一些数据。x 值是以秒为单位的时间数据,y 值为 numpy.float64。然后,我将 x 值转换为格式为小时:分钟:秒.小数的字符串值。

我想以秒为单位绘制我的数据,并能够在第一个标签下添加时间的字符串格式。我还希望缩放我的绘图(使用 jupyter notebook 上的 matplotlib 笔记本模式),因为第一个标签会自动调整到新的刻度位置,我希望辅助(字符串格式)标签也可以调整。

我的数据:

%matplotlib notebook
import numpy as np
x = np.arange(32349, 32359, 1/10) # time format in seconds
y = np.cos(x)

这就是我将时间格式转换为字符串格式 (h:min:s) 的方式

import time
x_str = [] # time format in strings
for n in range(len(x)):
    decimals = str(round((x[n]-int(x[n])),3))[1:]
    x_str.append(time.strftime('%H:%M:%S', time.gmtime(x[n]))+decimals) # only way I could add the decimals

有人对我有解决方案吗?谢谢你的时间。

4

1 回答 1

0

我似乎找到了使用ticker.FuncFormatter的解决方案:

from matplotlib import ticker

def secTo24h(x):
    decimals = str(round(x-int(x),3))[1:]
    xnew = time.strftime('%H:%M:%S', time.gmtime(x))+decimals
    return xnew

plt.figure(constrained_layout=True)
tick_to_24hourSys = lambda x,y: (secTo24h(x))
plt.plot(x, y)
ax = plt.gca()
myFormatter = ticker.FuncFormatter(tick_to_24hourSys)
ax.xaxis.set_major_formatter(myFormatter)
plt.setp(ax.get_xticklabels(), rotation=45)
plt.xlabel('time (24h)')
plt.ylabel('y')
plt.grid()
plt.show()

缩放时,标签会自动调整。

于 2020-07-01T15:54:15.027 回答