如何在 matplotlib 中将正值设置为一种颜色,将负值设置为另一种颜色?
How can I set positive values to one color and negative values to another in matplotlib?
我有一个随机正值和负值的条形图。我想在条形图中将所有负值设置为蓝色,将所有正值设置为红色。
如何让负值变成蓝色,正值变成红色?
这是我目前所做的尝试,但出现错误:
rand = np.random.randint(-2, 2, (30))
time = np.arange(1,31,1)
plt.bar(time, rand)
plt.show()
if rand < 0:
plt.bar(time, rand,'blue')
elif rand > 0:
plt.bar(time, rand,'red')
plt.show()
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-110-2154dd329d10> in <module>
----> 1 if rand < 0:
2 plt.bar(time, rand,'blue')
3 elif rand > 0:
4 plt.bar(time, rand,'red')
5 plt.show()
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
numpy 表达式rand < 0
给出了一个包含 True 和 False 值的数组。这不能用于 if
-测试。在 if
测试中,整个表达式需要为 True 或 False。
但是,表达式 rand < 0
可以用作数组的索引,只选择数组中的那些索引:
from matplotlib import pyplot as plt
import numpy as np
rand = np.random.randint(-2, 2, (30))
time = np.arange(1, 31, 1)
plt.bar(time[rand < 0], rand[rand < 0], color='tomato')
plt.bar(time[rand > 0], rand[rand > 0], color='cornflowerblue')
plt.axhline(0, color='grey', lw=0.5)
plt.show()
了解 np.where
plt.bar(x, y, color=np.where(y>0, 'b', 'r'))
我有一个随机正值和负值的条形图。我想在条形图中将所有负值设置为蓝色,将所有正值设置为红色。 如何让负值变成蓝色,正值变成红色?
这是我目前所做的尝试,但出现错误:
rand = np.random.randint(-2, 2, (30))
time = np.arange(1,31,1)
plt.bar(time, rand)
plt.show()
if rand < 0:
plt.bar(time, rand,'blue')
elif rand > 0:
plt.bar(time, rand,'red')
plt.show()
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-110-2154dd329d10> in <module>
----> 1 if rand < 0:
2 plt.bar(time, rand,'blue')
3 elif rand > 0:
4 plt.bar(time, rand,'red')
5 plt.show()
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
numpy 表达式rand < 0
给出了一个包含 True 和 False 值的数组。这不能用于 if
-测试。在 if
测试中,整个表达式需要为 True 或 False。
但是,表达式 rand < 0
可以用作数组的索引,只选择数组中的那些索引:
from matplotlib import pyplot as plt
import numpy as np
rand = np.random.randint(-2, 2, (30))
time = np.arange(1, 31, 1)
plt.bar(time[rand < 0], rand[rand < 0], color='tomato')
plt.bar(time[rand > 0], rand[rand > 0], color='cornflowerblue')
plt.axhline(0, color='grey', lw=0.5)
plt.show()
了解 np.where
plt.bar(x, y, color=np.where(y>0, 'b', 'r'))