Matplotlib неправильно читает ось времени - PullRequest
0 голосов
/ 04 февраля 2020

Я хочу визуализировать данные daily , используя Matplotlib. Данные соответствуют температуре и времени и имеют следующий формат:

    Time    Temperature

1   8:23:04      18.5
2   8:23:04      19.0
3   9:12:57      19.0
4   9:12:57      20.0
... ... ...

Но при построении графика значения Time на x-axis искажаются, что выглядит следующим образом: enter image description here

Понимая, что Matplotlib может неправильно интерпретировать данные о времени, я преобразовал формат времени, используя pd.to_datetime:

df['Time'] = pd.to_datetime(df['Time'], format="%H:%M:%S")  

df.plot( 'Time', 'Temperature',figsize=(20, 10))

df.describe()

, но это снова вернуло: enter image description here

Как сделать так, чтобы время на x-axis выглядело нормально? Спасибо

1 Ответ

1 голос
/ 04 февраля 2020

Как говорил @Michael O., вам нужно позаботиться о дате и времени. Вы пропустите день, год и месяц. Здесь я реализовал возможное решение, добавив эти недостающие данные с некоторыми значениями по умолчанию, вы можете изменить их. Код очень прост, и комментарии иллюстрируют то, что я делаю.

import pandas as pd
from datetime import datetime, date, time, timezone
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

vals=[["8:23:04",      18.5],
["8:23:04",      19.0],
["9:12:57",      19.0],
["9:12:57",      20.0]]
apd=pd.DataFrame(vals, columns=["Time", "Temp"])

# a simple function to convert a string to datetime
def conv_time(cell):
    dt = datetime.strptime(cell, "%d/%m/%Y %H:%M:%S")
    return(dt)


# the dataframe misses the day, month and year, we need to add some
apd["Time"]=["{}/{}/{} {}".format(1,1,2020, cell) for cell in apd["Time"]]

# we use the function to convert the column to a datetime
apd["Time"]=[conv_time(cell) for cell in apd["Time"]]

## plotting the results taking care of the axis
fig, ax = plt.subplots()
ax.xaxis.set_major_formatter(mdates.DateFormatter("%H"))
ax.set_xlim([pd.to_datetime('2020-01-1 6:00:00'), pd.to_datetime('2020-01-1 12:00:00')])
ax.scatter(apd["Time"], apd["Temp"])

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...