Python 具有最大可分辨颜色的彩色地图

Python 具有最大可分辨颜色的彩色地图,python,matplotlib,colors,colormap,Python,Matplotlib,Colors,Colormap,使用Python中的matplotlib,我正在绘制20到50行之间的任意位置。使用matplotlib的滑动色标,在20分钟之前绘制一定数量的线条后,这些线条将变得难以区分 虽然我在Matlab和C中看到了一些创建任意数量颜色的颜色映射的代码示例,这些颜色映射可以最大程度地相互区分,但我找不到Python的任何代码 有人能给我指出Python中可以实现这一点的东西的方向吗 干杯最近,我也遇到了同样的问题。因此,我创建了以下简单的Python代码来为jupyter笔记本matplotlib生成视

使用Python中的matplotlib,我正在绘制20到50行之间的任意位置。使用matplotlib的滑动色标,在20分钟之前绘制一定数量的线条后,这些线条将变得难以区分

虽然我在Matlab和C中看到了一些创建任意数量颜色的颜色映射的代码示例,这些颜色映射可以最大程度地相互区分,但我找不到Python的任何代码

有人能给我指出Python中可以实现这一点的东西的方向吗


干杯最近,我也遇到了同样的问题。因此,我创建了以下简单的Python代码来为jupyter笔记本matplotlib生成视觉上可区分的颜色。它在感知上并不能最大限度地区分,但它比matplotlib中的大多数内置彩色贴图工作得更好

该算法将HSV比例分割为2个块,第一个块的RGB值增加,第二个块的alpha值减少,以便颜色可以融入白色背景

请注意,如果您使用的是jupyter笔记本以外的任何工具包,则必须确保背景为白色,否则,alpha混合将不同,合成的颜色也将不同

此外,颜色的独特性在很大程度上取决于计算机屏幕、投影仪等。在一个屏幕上可分辨的调色板不一定意味着在另一个屏幕上。如果要用于演示,必须对其进行物理测试

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap

def generate_colormap(N):
    arr = np.arange(N)/N
    N_up = int(math.ceil(N/7)*7)
    arr.resize(N_up)
    arr = arr.reshape(7,N_up//7).T.reshape(-1)
    ret = matplotlib.cm.hsv(arr)
    n = ret[:,3].size
    a = n//2
    b = n-a
    for i in range(3):
        ret[0:n//2,i] *= np.arange(0.2,1,0.8/a)
    ret[n//2:,3] *= np.arange(1,0.1,-0.9/b)
#     print(ret)
    return ret

N = 16
H = np.arange(N*N).reshape([N,N])
fig = plt.figure(figsize=(10, 10))
ax = plt.pcolor(H, cmap=ListedColormap(generate_colormap(N*N)))

我喜欢@Xiancong84创建的调色板的想法,并稍微修改了他的代码,使其不依赖于alpha通道。我把它放在这里给别人用,谢谢@xuancong84

输入数学 将numpy作为np导入 从matplotlib.colors导入ListedColormap 从matplotlib.cm导入hsv def生成不同颜色的颜色映射数:int=80: 如果不同颜色的数量=0: 不同颜色的数量=80 阴影的数量=7 不同颜色的数量与阴影的数量=intmath.ceiln不同颜色的数量/阴影的数量*阴影的数量
创建一个数组,使用从可能重复的答案中提取的均匀绘制的浮动,这似乎是为了避免索引中的颜色循环。我知道如何使用颜色贴图来避免这种情况,但我想通过算法生成一组颜色,这些颜色实际上可以用眼睛很容易地分辨出来。一旦你用hsv彩色地图在一个图中得到20条线,你就会得到5个非常相似的绿色阴影,这是不可能的。我可以帮忙。太好了,谢谢。我只是复制颜色列表,并根据需要访问它们。将允许您创建自己的列表。同样地。想法总是一样的:从一个包含许多颜色的列表开始,根据需要,从中选择一个N项子集。太棒了,这正是我需要的50个任务的甘特图。谢谢