如何在 matplotlib 日期条形图中的某个日期后为所有条形着色
How to colour all bars after a certain date in a matplotlib date bar chart
我有一个数据集,它由一个名为 x
的列表中的 datetime.datetime
个对象和一个名为 y
的整数列表组成。我像这样绘制它们:
plt.bar(x, y)
plt.show()
如何在给定日期之后为所有条形图着色另一种颜色?我知道我可以通过分配 plt.bar(x, y)
的结果来获得柱形列表,但除了制作简单的图之外,我从来没有搞砸过 matplotlib
。
您可以制作一个布尔掩码,其中 return 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])
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')
我有一个数据集,它由一个名为 x
的列表中的 datetime.datetime
个对象和一个名为 y
的整数列表组成。我像这样绘制它们:
plt.bar(x, y)
plt.show()
如何在给定日期之后为所有条形图着色另一种颜色?我知道我可以通过分配 plt.bar(x, y)
的结果来获得柱形列表,但除了制作简单的图之外,我从来没有搞砸过 matplotlib
。
您可以制作一个布尔掩码,其中 return 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])
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')