Cores nomeadas no matplotlib

259

Quais cores nomeadas estão disponíveis no matplotlib para uso em plotagens? Eu posso encontrar uma lista na documentação do matplotlib que afirma que esses são os únicos nomes:

b: blue
g: green
r: red
c: cyan
m: magenta
y: yellow
k: black
w: white

No entanto, descobri que essas cores também podem ser usadas, pelo menos neste contexto:

scatter(X,Y, color='red')
scatter(X,Y, color='orange')
scatter(X,Y, color='darkgreen')

mas estes não estão na lista acima. Alguém conhece uma lista exaustiva das cores nomeadas que estão disponíveis?

TC Proctor
fonte
4
Basicamente, são todos os nomes de cores HTML, então você sempre pode pesquisar no Google "cores HTML" se desejar vários gráficos agradáveis. A excelente resposta de @ BoshWash abaixo fornece a lista exata, no entanto.
precisa
14
Há também esta bela imagem em matplotlib.org
Essa é uma bela imagem, eu provavelmente deveria ter percebido. Para ser justo, ele foi postado pela primeira vez um mês antes de eu postar esta pergunta e tenho certeza de que pesquisei nos documentos várias vezes antes da resposta para essa pergunta.
TC Proctor

Respostas:

303

Eu sempre esqueço os nomes das cores que quero usar e continuo voltando a esta pergunta =)

As respostas anteriores são ótimas, mas acho um pouco difícil obter uma visão geral das cores disponíveis na imagem postada. Como prefiro que as cores sejam agrupadas com cores semelhantes, ajustei levemente a resposta matplotlib mencionada no comentário acima para obter uma lista de cores classificada em colunas. O pedido não é idêntico ao que eu classificaria por olho, mas acho que dá uma boa visão geral.

Atualizei a imagem e o código para refletir que 'rebeccapurple' foi adicionado e as três cores prudentes foram movidas sob o prefixo 'xkcd:' desde que postei essa resposta originalmente.

insira a descrição da imagem aqui

Eu realmente não mudei muito do exemplo do matplotlib, mas aqui está o código da integridade.

import matplotlib.pyplot as plt
from matplotlib import colors as mcolors


colors = dict(mcolors.BASE_COLORS, **mcolors.CSS4_COLORS)

# Sort colors by hue, saturation, value and name.
by_hsv = sorted((tuple(mcolors.rgb_to_hsv(mcolors.to_rgba(color)[:3])), name)
                for name, color in colors.items())
sorted_names = [name for hsv, name in by_hsv]

n = len(sorted_names)
ncols = 4
nrows = n // ncols

fig, ax = plt.subplots(figsize=(12, 10))

# Get height and width
X, Y = fig.get_dpi() * fig.get_size_inches()
h = Y / (nrows + 1)
w = X / ncols

for i, name in enumerate(sorted_names):
    row = i % nrows
    col = i // nrows
    y = Y - (row * h) - h

    xi_line = w * (col + 0.05)
    xf_line = w * (col + 0.25)
    xi_text = w * (col + 0.3)

    ax.text(xi_text, y, name, fontsize=(h * 0.8),
            horizontalalignment='left',
            verticalalignment='center')

    ax.hlines(y + h * 0.1, xi_line, xf_line,
              color=colors[name], linewidth=(h * 0.8))

ax.set_xlim(0, X)
ax.set_ylim(0, Y)
ax.set_axis_off()

fig.subplots_adjust(left=0, right=1,
                    top=1, bottom=0,
                    hspace=0, wspace=0)
plt.show()

Cores nomeadas adicionais

Atualizado 2017-10-25. Mesclei minhas atualizações anteriores nesta seção.

xkcd

Se você desejar usar cores nomeadas adicionais ao plotar com matplotlib, poderá usar os nomes de cores de fontes compartilhadas xkcd , através do prefixo 'xkcd:':

plt.plot([1,2], lw=4, c='xkcd:baby poop green')

Agora você tem acesso a uma infinidade de cores nomeadas!

insira a descrição da imagem aqui

Quadro

As cores padrão do Tableau estão disponíveis no matplotlib através do prefixo 'tab:':

plt.plot([1,2], lw=4, c='tab:green')

Existem dez cores distintas:

insira a descrição da imagem aqui

HTML

Você também pode plotar cores pelo código hexadecimal HTML :

plt.plot([1,2], lw=4, c='#8f9805')

Isso é mais parecido com especificar e tupla RGB, em vez de uma cor nomeada (além do fato de o código hexadecimal ser passado como uma string), e não incluirei uma imagem das 16 milhões de cores que você pode escolher ...


Para mais detalhes, consulte a documentação de cores do matplotlib e o arquivo de origem especificando as cores disponíveis _color_data.py.


joelostblom
fonte
Obrigado pela trama! Por curiosidade, 'y' é realmente diferente de 'amarelo'? O primeiro enredo tem cores diferentes.
ComputerScientist
1
@ComputerScientist Sim, de acordo com esta edição do Github e a discussão da lista de contatos vinculada, as cores de uma única letra receberam valores de RBG com base no equivalente do Matlab, enquanto o nome completo corresponde às cores HTML. Atualmente, as cores de letra única do Matlab também seguem o padrão HTML, portanto, não tenho certeza se essa é uma alteração recente do Matlab ou se as cores de letra única do matplotlib foram aprimoradas / escolhidas por motivos como visibilidade, que também foi mencionado nas discussões.
Joelostblom 01/08/19
@AdrianTorrie: você pode conceder uma recompensa de sua própria escolha como um 'Obrigado' adicional! Um prêmio de recompensa destaca essa resposta e fornece pontos adicionais ao respondente.
SherylHohman
Obrigado por manter isso atualizado!
JakeCowton 11/11
@joelostblom, no gráfico das cores xkcd, como você conseguiu que os códigos hexadecimais fossem exibidos em cinza, ao lado do nome da cor (em preto)?
MMelnicki
312

O Matplotlib usa um dicionário de seu módulo colors.py.

Para imprimir os nomes, use:

# python2:

import matplotlib
for name, hex in matplotlib.colors.cnames.iteritems():
    print(name, hex)

# python3:

import matplotlib
for name, hex in matplotlib.colors.cnames.items():
    print(name, hex)

Este é o dicionário completo:

cnames = {
'aliceblue':            '#F0F8FF',
'antiquewhite':         '#FAEBD7',
'aqua':                 '#00FFFF',
'aquamarine':           '#7FFFD4',
'azure':                '#F0FFFF',
'beige':                '#F5F5DC',
'bisque':               '#FFE4C4',
'black':                '#000000',
'blanchedalmond':       '#FFEBCD',
'blue':                 '#0000FF',
'blueviolet':           '#8A2BE2',
'brown':                '#A52A2A',
'burlywood':            '#DEB887',
'cadetblue':            '#5F9EA0',
'chartreuse':           '#7FFF00',
'chocolate':            '#D2691E',
'coral':                '#FF7F50',
'cornflowerblue':       '#6495ED',
'cornsilk':             '#FFF8DC',
'crimson':              '#DC143C',
'cyan':                 '#00FFFF',
'darkblue':             '#00008B',
'darkcyan':             '#008B8B',
'darkgoldenrod':        '#B8860B',
'darkgray':             '#A9A9A9',
'darkgreen':            '#006400',
'darkkhaki':            '#BDB76B',
'darkmagenta':          '#8B008B',
'darkolivegreen':       '#556B2F',
'darkorange':           '#FF8C00',
'darkorchid':           '#9932CC',
'darkred':              '#8B0000',
'darksalmon':           '#E9967A',
'darkseagreen':         '#8FBC8F',
'darkslateblue':        '#483D8B',
'darkslategray':        '#2F4F4F',
'darkturquoise':        '#00CED1',
'darkviolet':           '#9400D3',
'deeppink':             '#FF1493',
'deepskyblue':          '#00BFFF',
'dimgray':              '#696969',
'dodgerblue':           '#1E90FF',
'firebrick':            '#B22222',
'floralwhite':          '#FFFAF0',
'forestgreen':          '#228B22',
'fuchsia':              '#FF00FF',
'gainsboro':            '#DCDCDC',
'ghostwhite':           '#F8F8FF',
'gold':                 '#FFD700',
'goldenrod':            '#DAA520',
'gray':                 '#808080',
'green':                '#008000',
'greenyellow':          '#ADFF2F',
'honeydew':             '#F0FFF0',
'hotpink':              '#FF69B4',
'indianred':            '#CD5C5C',
'indigo':               '#4B0082',
'ivory':                '#FFFFF0',
'khaki':                '#F0E68C',
'lavender':             '#E6E6FA',
'lavenderblush':        '#FFF0F5',
'lawngreen':            '#7CFC00',
'lemonchiffon':         '#FFFACD',
'lightblue':            '#ADD8E6',
'lightcoral':           '#F08080',
'lightcyan':            '#E0FFFF',
'lightgoldenrodyellow': '#FAFAD2',
'lightgreen':           '#90EE90',
'lightgray':            '#D3D3D3',
'lightpink':            '#FFB6C1',
'lightsalmon':          '#FFA07A',
'lightseagreen':        '#20B2AA',
'lightskyblue':         '#87CEFA',
'lightslategray':       '#778899',
'lightsteelblue':       '#B0C4DE',
'lightyellow':          '#FFFFE0',
'lime':                 '#00FF00',
'limegreen':            '#32CD32',
'linen':                '#FAF0E6',
'magenta':              '#FF00FF',
'maroon':               '#800000',
'mediumaquamarine':     '#66CDAA',
'mediumblue':           '#0000CD',
'mediumorchid':         '#BA55D3',
'mediumpurple':         '#9370DB',
'mediumseagreen':       '#3CB371',
'mediumslateblue':      '#7B68EE',
'mediumspringgreen':    '#00FA9A',
'mediumturquoise':      '#48D1CC',
'mediumvioletred':      '#C71585',
'midnightblue':         '#191970',
'mintcream':            '#F5FFFA',
'mistyrose':            '#FFE4E1',
'moccasin':             '#FFE4B5',
'navajowhite':          '#FFDEAD',
'navy':                 '#000080',
'oldlace':              '#FDF5E6',
'olive':                '#808000',
'olivedrab':            '#6B8E23',
'orange':               '#FFA500',
'orangered':            '#FF4500',
'orchid':               '#DA70D6',
'palegoldenrod':        '#EEE8AA',
'palegreen':            '#98FB98',
'paleturquoise':        '#AFEEEE',
'palevioletred':        '#DB7093',
'papayawhip':           '#FFEFD5',
'peachpuff':            '#FFDAB9',
'peru':                 '#CD853F',
'pink':                 '#FFC0CB',
'plum':                 '#DDA0DD',
'powderblue':           '#B0E0E6',
'purple':               '#800080',
'red':                  '#FF0000',
'rosybrown':            '#BC8F8F',
'royalblue':            '#4169E1',
'saddlebrown':          '#8B4513',
'salmon':               '#FA8072',
'sandybrown':           '#FAA460',
'seagreen':             '#2E8B57',
'seashell':             '#FFF5EE',
'sienna':               '#A0522D',
'silver':               '#C0C0C0',
'skyblue':              '#87CEEB',
'slateblue':            '#6A5ACD',
'slategray':            '#708090',
'snow':                 '#FFFAFA',
'springgreen':          '#00FF7F',
'steelblue':            '#4682B4',
'tan':                  '#D2B48C',
'teal':                 '#008080',
'thistle':              '#D8BFD8',
'tomato':               '#FF6347',
'turquoise':            '#40E0D0',
'violet':               '#EE82EE',
'wheat':                '#F5DEB3',
'white':                '#FFFFFF',
'whitesmoke':           '#F5F5F5',
'yellow':               '#FFFF00',
'yellowgreen':          '#9ACD32'}

Você pode plotá-los assim:

import matplotlib.pyplot as plt
import matplotlib.patches as patches
import matplotlib.colors as colors
import math


fig = plt.figure()
ax = fig.add_subplot(111)

ratio = 1.0 / 3.0
count = math.ceil(math.sqrt(len(colors.cnames)))
x_count = count * ratio
y_count = count / ratio
x = 0
y = 0
w = 1 / x_count
h = 1 / y_count

for c in colors.cnames:
    pos = (x / x_count, y / y_count)
    ax.add_patch(patches.Rectangle(pos, w, h, color=c))
    ax.annotate(c, xy=pos)
    if y >= y_count-1:
        x += 1
        y = 0
    else:
        y += 1

plt.show()
BoshWash
fonte
1
Obrigado pela resposta, era exatamente o que eu estava procurando. Penso que, em combinação com o comentário de Joe Kington, praticamente todas as bases estão cobertas.
TC Proctor
Aqui você também pode encontrar os valores RGB: flask.sagenb.org/src/plot/colors.py
pceccon
Se você quer um rápido olhar para a lista visual de cores nomeadas on-line: matplotlib.org/examples/color/named_colors.html
BallpointBen
145

Além da resposta de BoshWash, aqui está a imagem gerada por seu código:

Cores nomeadas

Mathias711
fonte
10

Para obter uma lista completa de cores para usar em plotagens:

import matplotlib.colors as colors
colors_list = list(colors._colors_full_map.values())

Portanto, você pode usar dessa maneira rapidamente:

scatter(X,Y, color=colors_list[0])
scatter(X,Y, color=colors_list[1])
scatter(X,Y, color=colors_list[2])
...
scatter(X,Y, color=colors_list[-1])
jnfran92
fonte
Isso não adiciona nada que as respostas anteriores não tenham.
TC Proctor