Названі кольори в matplotlib


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, тому ви завжди можете просто гугл "HTML кольори", якщо хочете кілька приємних діаграм. @ Відмінна відповідь BoshWash нижче дає точний список.
Джо Кінгтон


Це гарна картина, я, мабуть, мав це помітити. Справедливо кажучи, його вперше опублікували за місяць до того, як я опублікував це запитання, і я впевнений, що багато разів до цього шукав документи, щоб відповісти на це питання.
TC Proctor

Відповіді:


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

Тепер у вас є доступ до безлічі названих кольорів!

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

Tableau

Кольори Tableau за замовчуванням доступні в 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.



Дякую за сюжет! Невже цікавість, чи справді "у" відрізняється від "жовтого"? Перший сюжет має їх як різні кольори.
ComputerScientist

1
@ComputerScientist Так, відповідно до цієї проблеми Github та пов'язаного списку розсилок, кольорам однієї літери було призначено значення RBG на основі їх колеги по Matlab, тоді як повне ім’я відповідає кольорам HTML. Кольори однієї літери Matlab в даний час також відповідають стандарту HTML, тому я не впевнений, чи це нещодавня зміна Matlab, або якщо кольори однословного matplotlib були підроблені / обрані з таких причин, як наочність, про яку також говорилося в дискусіях.
joelostblom

@AdrianTorrie: ви можете нагородити за власний вибір нагороду як додаткову «Спасибі»! Бонусна нагорода надзвичайно висвітлює цю відповідь і дає додаткові бали.
SherylHohman

Дякуємо, що стежили за цим!
RockJake28

@joelostblom, в сюжеті кольорів xkcd, як ви отримали шістнадцяткові коди для відображення сірим кольором, поруч із назвою кольору (чорним кольором)?
М.Мельницький

312

Matplotlib використовує словник зі свого модуля color.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()

1
Дякую за відповідь, саме це я шукав. Я думаю, що в поєднанні з коментарем @Joe Kington, майже всі основи висвітлені.
TC Proctor

Тут ви також можете знайти значення RGB: flask.sagenb.org/src/plot/colors.py
pceccon

Якщо ви хочете швидко переглянути візуальний список названих кольорів онлайн: matplotlib.org/examples/color/named_colors.html
BallpointBen


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

Це не додає нічого, чого попередні відповіді не мають.
TC Proctor
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.