Отрегулируйте метки времени по оси X - Matplotlib

Вы можете использовать функцию $convert , чтобы извлечь дату из ObjectId, начиная с версии 4.0.

Что-то вроде

$convert: { input: "$_id", to: "date" } 

Вы можете запросить на дату сравнения времени начала и окончания для даты.

db.collectionname.find({
  "$expr":{
    "$and":[
      {"$gte":[{"$convert":{"input":"$_id","to":"date"}}, ISODate("2018-07-03T00:00:00.000Z")]},
      {"$lte":[{"$convert":{"input":"$_id","to":"date"}}, ISODate("2018-07-03T11:59:59.999Z")]}
    ]
  }
})

ИЛИ

Для достижения этого вы можете использовать сокращенную $toDate .

db.collectionname.find({
  "$expr":{
    "$and":[
      {"$gte":[{"$toDate":"$_id"}, ISODate("2018-07-03T00:00:00.000Z")]},
      {"$lte":[{"$toDate":"$_id"},ISODate("2018-07-03T11:59:59.999Z")]}
    ]
  }
})

0
задан jonboy 4 March 2019 в 03:09
поделиться

1 ответ

Ваш объект timedelta преобразуется в числовое представление с помощью matplotlib. Вот почему вы не получаете дату на оси X. И сюжет идет по порядку. Просто '00:40:00' меньше, чем во всех остальных случаях, поэтому он изображен как самая левая точка.

Вместо этого вы можете использовать формат даты и времени для включения дней, что будет означать, что 00:40:00 должно наступить последним, поскольку оно выпадет на следующий день. Вы также можете использовать метод построения панд для более удобного форматирования:

d = ({
    'Time' : ['2019/1/1 7:00:00','2019/1/1 10:30:00','2019/1/1 12:40:00',
              '2019/1/1 16:25:00','2019/1/1 18:30:00','2019/1/1 22:40:00',
              '2019/1/2 00:40:00'],
    'Value' : [1,2,3,4,5,4,10],           
})

df = pd.DataFrame(d)
df['Time'] = pd.to_datetime(df['Time'])

df.plot(x='Time', y='Value')

enter image description here

<час>

Обновление

Для установки тиканье в ваши моменты времени немного сложно. Этот пост даст вам представление о том, как работает позиционирование. По сути, вам нужно использовать что-то вроде matplotlib.dates.date2num, чтобы получить числовое представление даты и времени:

xticks = [matplotlib.dates.date2num(x) for x in df['Time']]
xticklabels = [x.strftime('%H:%M') for x in df['Time']]

ax.set_xticks(xticks)
ax.set_xticklabels(xticklabels)

enter image description here

0
ответ дан busybear 4 March 2019 в 03:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: