我正在创建具有整数目标的数据散点图。自然地,我将目标表示为散点图中的颜色。但是,有时由于模型的性质,我的模型会预测不在原始集中的目标。也就是说,我的训练目标是从[0,1,2]中选择的,我的模型偶尔会预测3,因为它不是很亮。
问题在于,当我散布我的数据,然后分别散布预测时,目标2在每个散布中都被映射为不同的颜色,这会导致图像质量下降。这是因为默认情况下,matplotlib会将我的颜色列表中的值缩放到某些给定值之间。我想覆盖此默认行为,并让我的颜色列表(是整数)始终映射到相同的颜色,例如无论我的c=targets
参数中有多少个不同的类,1都会映射为绿色。
答案 0 :(得分:1)
创建一个颜色列表,例如colors = ['blue', 'red', 'green', 'purple']
,该颜色列表具有与您不同目标相同的颜色。然后,将c=colors[target]
设置为target
是您的模型弹出的整数。这意味着您需要一次绘制每个点,除非您对所有目标进行排序并最后绘制。
答案 1 :(得分:0)
我最终做了以下事情:
def cmap_one(i):
return "#"+hex(((i+1)*2396745)%(256**3))[2:].rjust(6,"0")
def cmap(colors):
return list(map(cmap_one, colors))
cmap
函数为我提供了从整数到html颜色的静态映射。它们相差很远,所以我得到的颜色非常不同,并且2396745相对于256**3
来说是质数,因此最终使用每种颜色,然后循环回到开头。顺便说一句,2396745大约为256**3/7
,因此颜色开始几乎在7之后重复。如果您希望颜色更大,则以连续的颜色彼此靠近为代价,将2396745替换为较小的数字,也可以被2整除。