python - 根据其值选择直方图中条形的颜色

标签 python matplotlib

我有数千个数据,我想绘制它们的直方图。我想根据直方图的值放置不同的颜色。我的值在0-10之间。所以,我想把条形的颜色从红色变成绿色。如果它接近 0,则颜色应为红色,如果接近 10,则颜色应为绿色。就像我附上的图片一样。在下面的例子中,我想将h行的颜色设置为接近绿色,b行的颜色接近红色。这是一个简单的示例,我有多个条形和值。

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
rating = [8, 4, 5,6]
objects = ('h', 'b', 'c','a')
y_pos = np.arange(len(objects))

plt.barh(y_pos, rating, align='center', alpha=0.5)
plt.yticks(y_pos, objects)


plt.show()

你能帮我解决这个问题吗?谢谢。 enter image description here

最佳答案

为了根据值应用颜色,matplotlib 使用颜色图与范数相结合。颜色图将 0 到 1 之间的值映射到颜色,例如 0 映射到绿色,0.5 映射到黄色,1 映射到红色。范数将给定范围内的值映射到 0 到 1 的范围,例如,最小值为 0,最大值为 1。将颜色图应用于给定值的范数,然后给出所需的颜色。

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

rating = [8, 4, 5, 6]
objects = ('h', 'b', 'c', 'a')
y_pos = np.arange(len(objects))

cmap = plt.get_cmap('RdYlGn_r')
norm = plt.Normalize(vmin=min(rating), vmax=max(rating))
plt.barh(y_pos, rating, align='center', color=cmap(norm(np.array(rating))))
plt.yticks(y_pos, objects)
plt.show()

colormapping bar colors

或者,seaborn 库可以用于更简单的方法:

import seaborn as sns

rating = [8, 4, 5, 6]
objects = ['h', 'b', 'c', 'a']

ax = sns.barplot(x=rating, y=objects, hue=rating, palette='RdYlGn_r', dodge=False)

seaborn barplot with hue

关于python - 根据其值选择直方图中条形的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75404738/

相关文章:

python - 尝试将子图彼此相邻放置

python - 使用相同的轴在 seaborn 热图顶部绘制线图

python - Python 中 4D 向量的可视化

python - Flask 与事件循环相结合

Python - 打印输出而不是公式

python - Asyncio 与另一个协程同时运行 Dash (Flask) 服务器

python - Cartopy 极地立体图中轮廓的奇怪行为

python - 寻找直线和轮廓之间的交点

python - 如何在 python 中将字符串转换为 ip 地址

python - 为元组列表创建映射的简便方法