Форматирование даты и времени в метках оси X Matplotlib - PullRequest
0 голосов
/ 04 февраля 2019

В настоящее время у меня есть дата, которая выглядит следующим образом:

enter image description here

Если я распечатываю типы данных, время равно datetime.date, а ценаnumpy.float64.Когда я пытаюсь построить это, используя следующий код, я получаю график ниже:

from matplotlib import dates
import matplotlib.pyplot as plt

plt.figure(figsize=(20, 10))
plt.plot(df['time'], df['price']*100, color='royalblue', marker='o', markersize=8, linewidth=3.5)

enter image description here

Я не понимаю, почему х-ось испорчена и почему даты форматируются как есть.В идеале, я просто хочу, чтобы даты были такими, как указано в столбце time кадра данных.Некоторые другие сообщения Stackoverflow предлагали DateFormatter, поэтому я попытался добавить следующую строку: plt.gca().xaxis.set_major_formatter(dates.DateFormatter('%Y-%m-%d')).Тем не менее, я получаю сообщение об ошибке «список» объект не имеет атрибута DateFormatter.Хотелось бы посоветовать, как исправить форматирование времени по оси x (в идеале должно быть только 5 отметок, соответствующих указанному времени).Спасибо!

1 Ответ

0 голосов
/ 04 февраля 2019

Используйте метод .plot () для панд, чтобы использовать возможности форматирования панд.Метод имеет множество вариантов, которые стоит изучить здесь .

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({'Price': np.random.randint(20, 60, size=10),
                   'Change': np.random.randint(0, 10, size=10),
                   'Date': pd.date_range('2019-01-01', periods=10, freq='D')})

df.plot(x='Date', 
        y=['Price', 'Change'], 
        marker='o',
        markersize=8, 
        linewidth=2.0)

enter image description here

df.plot(x='Date', 
        y=['Price', 'Change'], 
        marker='o',
        markersize=8, 
        linewidth=2.0,
        color=['green', 'red'],
        subplots=True)

enter image description here

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