Я хочу построить данные временных рядов, используя MatPlotLib. Данные хранятся в формате CSV, который я обрабатываю в Pandas DataFrame, используя pd.read_csv()
, который работает нормально. Набор данных содержит один столбец отметки времени и около 10 столбцов значений. Я конвертирую метку времени (изначально строка в формате гггг-ММ-дд чч: мм: сс) через pd.to_datetime(dataFrame['TIMESTAMP'], format='%Y-%m-%d %H:%M:%S')
к дате и времени.
Для построения графика данных я использую следующий код (генерация данных примера не является частью моего кода):
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import seaborn as sns
N = 30
timestamps = pd.date_range('2020-01-16 8:00', periods=N, freq='72s')
# note: the original timestamps aren't evenly spaced, this is just data to test
dataFrame = pd.DataFrame({'TIMESTAMP': timestamps, 'Y1': np.random.normal(100, 30, N), 'Y2': np.random.normal(100, 30, N)})
acqFieldName = 'Y1'
fig = sns.pointplot(x='TIMESTAMP', y=acqFieldName, data=dataFrame, scale=0.75)
timestamps = dataFrame['TIMESTAMP'].dt.time
fig.axes.set_xticklabels(labels=timestamps, rotation=45)
plt.show()
Что приводит к следующему:
![Plot resulting from code above](https://i.stack.imgur.com/IJraa.png)
Тем не менее, я хотел бы изменить ось х: тики слишком плотные, поэтому я бы хотел, скажем, 10 тиков, и хотел бы видеть время, проведенное в минутах, в формате «мм: сс».
Я попробовал следующее:
fig = sns.pointplot(x='TIMESTAMP', y=acqFieldName, data=dataFrame, scale=0.75)
timestamps = dataFrame['TIMESTAMP'].dt.time
xmin = dataFrame['TIMESTAMP'][0]
xmax = dataFrame['TIMESTAMP'][len(dataFrame['TIMESTAMP']) - 1]
timeDiff: timedelta = xmax - xmin
customTicks = np.linspace(0., timeDiff.seconds, 10)
fig.axes.set_xticklabels(labels=customTicks, rotation=45)
fig.axes.set_xticks(customTicks)
plt.show()
Что приводит к следующему:
![enter image description here](https://i.stack.imgur.com/3EUJV.png)
явно не то, что я хочу.
Моя проблема была бы решена, если бы я мог уменьшить количество тиков, отформатированных как время, или - лучше - если бы точки совпали с тиками, указанными как потраченное время.
Обновление: предложение урожая Зараки Кенпачи
fig, ax = plt.subplots()
ax.plot(dataFrame.set_index('TIMESTAMP'), dataFrame[acqFieldName])
plt.show()
![enter image description here](https://i.stack.imgur.com/GK41Z.png)
Рабочий раствор на основе ответа Йохана C:
приводит к:
![Final plot](https://i.stack.imgur.com/pTOYK.png)