Названные цвета в матплотлиб

259

Какие именованные цвета доступны в matplotlib для использования на графиках? Я могу найти список в документации по matplotlib, который утверждает, что это единственные имена:

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

Однако я обнаружил, что эти цвета также можно использовать, по крайней мере, в этом контексте:

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

но их нет в списке выше. Кто-нибудь знает исчерпывающий список именованных цветов, которые доступны?

ТК Проктор
источник
4
По сути, это все названия цветов HTML, так что вы всегда можете просто ввести Google «HTML colors», если вам нужно несколько хороших диаграмм. Отличный ответ @ BoshWash ниже дает вам точный список.
Джо Кингтон
14
На matplotlib.org
Это хорошая картина, я, наверное, должен был это заметить. Справедливости ради, он был впервые опубликован за месяц до того, как я опубликовал этот вопрос, и я почти уверен, что до этого много раз просматривал документы, чтобы найти ответ на этот вопрос.
Проктор ТК

Ответы:

303

Я постоянно забываю названия цветов, которые хочу использовать, и постоянно возвращаюсь к этому вопросу =)

Предыдущие ответы великолепны, но мне сложно получить обзор доступных цветов из размещенного изображения. Я предпочитаю, чтобы цвета были сгруппированы с похожими цветами, поэтому я немного подправил ответ matplotlib, который упоминался в комментарии выше, чтобы получить список цветов, отсортированный по столбцам. Порядок не идентичен тому, как я сортировал бы на глаз, но я думаю, что он дает хороший обзор.

Я обновил изображение и код, чтобы отразить, что «rebeccapurple» был добавлен, а три мудрых цвета были перемещены под префиксом «xkcd:» с тех пор, как я опубликовал этот ответ изначально.

введите описание изображения здесь

Я действительно не сильно изменился из примера matplotlib, но вот код для полноты.

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()

Дополнительные названные цвета

Обновлено 2017-10-25. Я слил мои предыдущие обновления в этот раздел.

XKCD

Если вы хотите использовать дополнительные именованные цвета при печати с помощью matplotlib, вы можете использовать краудсорсинговые имена цветов xkcd через префикс 'xkcd:':

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

Теперь у вас есть доступ к множеству названных цветов!

введите описание изображения здесь

живописная картина

Цвета таблиц по умолчанию доступны в matplotlib через префикс «tab:»:

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

Есть десять разных цветов:

введите описание изображения здесь

HTML

Вы также можете наносить цвета по их шестнадцатеричному коду HTML :

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

Это больше похоже на указание и RGB-кортеж, а не на именованный цвет (кроме того факта, что шестнадцатеричный код передается в виде строки), и я не буду включать изображение из 16 миллионов цветов, которые вы можете выбрать ...


Для получения более подробной информации, пожалуйста , обратитесь к документации Matplotlib цветов и исходный файл , указывающий доступные цвета, _color_data.py.


joelostblom
источник
Спасибо за сюжет! Из любопытства, действительно ли «у» отличается от «желтого»? Первый сюжет имеет их как разные цвета.
ComputerScientist
1
@ComputerScientist Да, в соответствии с этой проблемой Github и обсуждением связанного списка рассылки, односимвольным цветам были присвоены значения RBG на основе их соответствия Matlab, а полное имя соответствует цветам HTML. Односимвольные цвета Matlab в настоящее время также соответствуют стандарту HTML, поэтому я не уверен, является ли это недавним изменением Matlab или что односимвольные цвета matplotlib были настроены / выбраны по таким причинам, как видимость, что также упоминалось в обсуждениях.
joelostblom
@AdrianTorrie: вы можете назначить награду по своему выбору в качестве дополнительного «Спасибо»! Награда за награду подчеркивает этот ответ и дает ответчику дополнительные очки.
SherylHohman
Спасибо за актуальность!
JakeCowton
@joelostblom, на графике цветов xkcd, как вы получили шестнадцатеричные коды для отображения серым цветом, помимо названия цвета (черным)?
MMelnicki
312

Matplotlib использует словарь из своего модуля colors.py.

Для печати имен используйте:

# 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)

Это полный словарь:

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'}

Вы можете построить их так:

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
источник
1
Спасибо за ответ, это именно то, что я искал. Я думаю, что в сочетании с комментарием @Joe Kington, почти все основы покрыты.
Проктор ТК
Здесь вы также можете найти значения RGB: flask.sagenb.org/src/plot/colors.py
pceccon
Если вы хотите быстро взглянуть на визуальный список именованных цветов онлайн: matplotlib.org/examples/color/named_colors.html
BallpointBen
145

В дополнение к ответу BoshWash, вот изображение, сгенерированное его кодом:

Названные цвета

Mathias711
источник
10

Чтобы получить полный список цветов для использования на графиках:

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

Таким образом, вы можете использовать таким образом быстро:

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
источник
Это не добавляет ничего, чего нет в предыдущих ответах.
Проктор ТК