【发布时间】:2022-01-06 06:56:52
【问题描述】:
我有一个水平条形图,我应该根据水平值将条形慢慢从黄色变为红色。所以X值越大,条形图越红
(我想展示剧情,但由于我的声誉低,我无法上传它的图片)
import matplotlib.pyplot as plt
x = [3,3,4]
y = [1,2,5]
plt.barh(x,y)
plt.show()
【问题讨论】:
标签: python matplotlib graph
我有一个水平条形图,我应该根据水平值将条形慢慢从黄色变为红色。所以X值越大,条形图越红
(我想展示剧情,但由于我的声誉低,我无法上传它的图片)
import matplotlib.pyplot as plt
x = [3,3,4]
y = [1,2,5]
plt.barh(x,y)
plt.show()
【问题讨论】:
标签: python matplotlib graph
我会做类似的手工制作:
colorsValue = []
for value in x:
if value < LOW_TRESHOLD:
colorsValue.append('yellow')
elif value >= HIGH_TRESHOLD:
colorsValue.append('red')
else:
colorsValue.append('orange')
plt.barh(x, y, color = colorsValue)
其中LOW_TRESHOLD 和HIGH_TRESHOLD 是由您决定的值以及颜色。 matplotlib 颜色列表为here。
这只是向您展示语法的一个最小示例。 Kroshtan 的解决方案也很好,比我自制的解决方案更通用,所以我建议你使用他的解决方案。
【讨论】:
您可以在color 参数中传递一个数组。可以使用 matplotlib 文档中的 cmap 计算此数组的值。
colors = [(1, 1, 0), (1, 0, 0)]
my_cmap = LinearSegmentedColormap.from_list(
'color_map', colors, N=100)
然后你将颜色缩放到你拥有的值:
rescale = lambda y: (y - np.min(y)) / (np.max(y) - np.min(y))
plt.barh(x,y,color=my_cmap(rescale(y)))
plt.show()
【讨论】: