import matplotlib.pyplot as plt
import matplotlib as mp
import numpy as np
xs = "ABCDEFGHI"
ys = [5, 6, 7, 8, 9, 10, 11, 12, 13]
#Colorize the graph based on likeability:
likeability_scores = np.array([
5, 4.5, 3.5,
2.5, 1.5, .5,
2, 3, 4,
])
data_normalizer = mp.colors.Normalize()
color_map = mp.colors.LinearSegmentedColormap(
"my_map",
{
"red": [(0, 1.0, 1.0),
(1.0, .5, .5)],
"green": [(0, 0, 0),
(1.0, 0, 0)],
"blue": [(0, 0, 0),
(1.0, 0, 0)]
}
)
#Map xs to numbers:
N = len(xs)
x_nums = np.arange(1, N+1)
#Plot a bar graph:
plt.bar(
x_nums,
ys,
align="center",
color=color_map(data_normalizer(likeability_scores))
)
#Change x numbers back to strings:
plt.xticks(x_nums, xs)
plt.show()
--output:--
r,g,b 值从 0-1 运行。这是红色映射:
"red": [(0, 1.0, 1.0),
(1.0, .5, .5)],
每个元组中的第一个元素指定归一化的相似度得分。每个元组中的第二个元素指定红色的阴影 (0-1)。每个元组中的第三个元素用于更复杂的东西,所以这里它总是与第二个元素相同。
红色映射指定 0-1.0(每个元组的第一个元素)之间的归一化相似度分数将映射到 100% 红色到 50% 红色的范围(每个元组中的第二个元素)。归一化的喜爱度得分为 0 将被映射到 100% 的红色,而归一化的喜爱度得分为 1.0 将被映射到 50% 的红色。将最深的红色设置为 50% 可防止红色变得太暗以至于看起来呈棕色或黑色。
您可以根据需要指定任意数量的元组 - 您只需确保为标准化的喜爱度分数的整个范围 (0-1) 分配红色值,例如:
"red": [(0, .5, .5),
(.8, .6, .6),
(1.0, .9, .9)],
你不能这样做:
"red": [(0, .5, .5),
(.8, 1.0, 1.0)],