Matplotlib 条形图上的颜色负值不同

Color Negative Values on Matplotlib Bar Plots Differently

我正在尝试对负值的条形图进行不同的着色。非常感谢任何实现此目的的指针。谢谢

import matplotlib.pyplot as plt
import numpy as np


city=['a','b','c','d']
pos = np.arange(len(city))
Effort =[4, 3, -1.5, -3.5]


plt.barh(pos,Effort,color='blue',edgecolor='black')
plt.yticks(pos, city)
plt.xlabel('DV', fontsize=16)
plt.ylabel('Groups', fontsize=16)
plt.title('ABCDEF',fontsize=20)
plt.show()

ABCDEF matplotlib graph

只需为第二个图涂上不同的颜色即可:

city = ['a', 'b', 'c', 'd']
pos = np.arange(len(city))
Effort = np.array([4, 3, -1.5, -3.5])


plt.barh(pos[Effort >= 0], Effort[Effort >= 0], color='blue', edgecolor='black') # positive values in blue
plt.barh(pos[Effort < 0], Effort[Effort < 0], color='red', edgecolor='black') # negative values in red
plt.yticks(pos, city)
plt.xlabel('DV', fontsize=16)
plt.ylabel('Groups', fontsize=16)
plt.title('ABCDEF', fontsize=20)
plt.show()

这导致:

这会将正条着色为绿色,将负条着色为红色。

import matplotlib.pyplot as plt
import numpy as np


city=['a','b','c','d']
pos = np.arange(len(city))
Effort =[4, 3, -1.5, -3.5]

colors = ['g' if e >= 0 else 'r' for e in Effort]

plt.barh(pos,Effort,color=colors,edgecolor='black')
plt.yticks(pos, city)
plt.xlabel('DV', fontsize=16)
plt.ylabel('Groups', fontsize=16)
plt.title('ABCDEF',fontsize=20)
plt.show()

如果 Effort 是一个 numpy 数组,我们可以使用 np.where 来获取颜色而不是列表理解。

Effort = np.array([4, 3, -1.5, -3.5])

colors = np.where(Effort >= 0, 'g', 'r')