Как раскрасить все столбцы после определенной даты в гистограмме matplotlib - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть набор данных, состоящий из datetime.datetime объектов в списке с именем x и списка целых чисел с именем y. Я строю их так:

plt.bar(x, y)
plt.show()

Как бы я go закрасил все столбцы после указанной даты другим цветом? Я знаю, что могу получить список баров, присваивая результат plt.bar(x, y), но я никогда не возился с matplotlib, кроме создания простых графиков.

1 Ответ

1 голос
/ 12 апреля 2020

Вы можете создать логическую маску, в которой вы возвращаете 0 или 1 в зависимости от того, превышает ли дата другую дату. Затем используйте этот массив, чтобы получить список цветов.

import matplotlib.pyplot as plt
import datetime
import numpy as np

base = datetime.datetime.today()

x = [base - datetime.timedelta(days=x) for x in range(10)]
y = np.random.randint(0, 10, 10)

greater = np.greater(x, datetime.datetime(2020, 4, 7)).astype(int)
colors = np.array(['red', 'green'])

plt.bar(x, y, color=colors[greater])

enter image description here

greater выглядит так:

Out[9]: array([1, 1, 1, 1, 1, 1, 0, 0, 0, 0])

И colors[greater] выглядит так:

array(['green', 'green', 'green', 'green', 'green', 'green', 'red', 'red',
       'red', 'red'], dtype='<U5')
...