带有特定于值的颜色映射的Python imshow

带有特定于值的颜色映射的Python imshow,python,matplotlib,colormap,imshow,Python,Matplotlib,Colormap,Imshow,我有一个大小为2000x200的2D数组,可以有N个不同的唯一值(大约20-30)。我希望能够使用具有随机颜色的colormap(非线性)来imshow此数组(例如Set3),将每个唯一值分配给随机颜色。为此,使用Set3的问题在于,它为一系列值指定了随机颜色,但不是唯一的值。 问题示例如下所示: 您可以创建n种颜色(在您的示例中为20-30种),然后为每个值分配一种随机颜色。 请参阅以下代码,了解如何创建n种颜色,然后如何为每个矩形指定唯一的颜色 import matplotlib.pyplo

我有一个大小为2000x200的2D数组,可以有N个不同的唯一值(大约20-30)。我希望能够使用具有随机颜色的
colormap
(非线性)来
imshow
此数组(例如
Set3
),将每个唯一值分配给随机颜色。为此,使用
Set3
的问题在于,它为一系列值指定了随机颜色,但不是唯一的值。 问题示例如下所示:

您可以创建n种颜色(在您的示例中为20-30种),然后为每个值分配一种随机颜色。 请参阅以下代码,了解如何创建n种颜色,然后如何为每个矩形指定唯一的颜色

import matplotlib.pyplot as plt

def get_cmap(n, name='hsv'):
    '''Returns a function that maps each index in 0, 1, ..., n-1 to a distinct 
    RGB color; the keyword argument name must be a standard mpl colormap name.'''
    return plt.cm.get_cmap(name, n)
def main():
    N = 30
    fig=plt.figure()
    ax=fig.add_subplot(111)   
    plt.axis('scaled')
    ax.set_xlim([ 0, N])
    ax.set_ylim([-0.5, 0.5])
    cmap = get_cmap(N)
    for i in range(N):
        rect = plt.Rectangle((i, -0.5), 1, 1, facecolor=cmap(i))
        ax.add_artist(rect)
    ax.set_yticks([])
    plt.show()

if __name__=='__main__':
    main()
您可以对每个值执行某种哈希函数,而不是使用范围(N)中的i。
希望这能对您有所帮助。

将您的数据组合到一个框架中,然后您可以将标签列应用到该框架中,这可能是值得的。在那之后,试着遵循一个解决方案,比如:签出;有两个原因:(1)它非常接近你想要做的事情,因此答案可能已经有帮助了,(2)它向你展示了你需要提供什么信息才能在这里得到高质量的答案。