我有数千个数据,我想绘制它们的直方图。我想根据直方图的值放置不同的颜色。我的值在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()
最佳答案
为了根据值应用颜色,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()
或者,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)
关于python - 根据其值选择直方图中条形的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75404738/