Benannte Farben in Matplotlib

259

Welche benannten Farben sind in matplotlib zur Verwendung in Plots verfügbar? Ich kann eine Liste in der matplotlib-Dokumentation finden, die behauptet, dass dies die einzigen Namen sind:

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

Ich habe jedoch festgestellt, dass diese Farben zumindest in diesem Zusammenhang auch verwendet werden können:

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

Diese sind jedoch nicht in der obigen Liste aufgeführt. Kennt jemand eine vollständige Liste der genannten Farben, die verfügbar sind?

TC Proctor
quelle
4
Grundsätzlich sind es alle HTML-Farbnamen, so dass Sie immer nur "HTML-Farben" googeln können, wenn Sie mehrere schöne Diagramme möchten. Die ausgezeichnete Antwort von @ BoshWash unten gibt Ihnen jedoch die genaue Liste.
Joe Kington
14
Es gibt auch dieses schöne Bild auf matplotlib.org
Das ist ein schönes Bild, ich hätte es wahrscheinlich bemerken sollen. Um fair zu sein, es wurde zum ersten Mal einen Monat vor dem Posten dieser Frage veröffentlicht, und ich bin mir ziemlich sicher, dass ich zuvor viele Male in den Dokumenten nach der Antwort auf diese Frage gesucht habe.
TC Proctor

Antworten:

303

Ich vergesse ständig die Namen der Farben, die ich verwenden möchte und komme immer wieder auf diese Frage zurück =)

Die vorherigen Antworten sind großartig, aber ich finde es etwas schwierig, einen Überblick über die verfügbaren Farben aus dem veröffentlichten Bild zu erhalten. Ich bevorzuge es, die Farben mit ähnlichen Farben zu gruppieren, daher habe ich die Matplotlib-Antwort , die in einem Kommentar oben erwähnt wurde , leicht angepasst , um eine in Spalten sortierte Farbliste zu erhalten. Die Reihenfolge ist nicht identisch mit der Art, wie ich nach Auge sortieren würde, aber ich denke, es gibt einen guten Überblick.

Ich habe das Bild und den Code aktualisiert, um anzuzeigen, dass 'rebeccapurple' hinzugefügt wurde und die drei Salbeifarben unter das Präfix 'xkcd:' verschoben wurden, seit ich diese Antwort ursprünglich gepostet habe.

Geben Sie hier die Bildbeschreibung ein

Ich habe wirklich nicht viel am matplotlib-Beispiel geändert, aber hier ist der Code der Vollständigkeit halber.

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

Zusätzliche benannte Farben

Aktualisiert am 25.10.2017. Ich habe meine vorherigen Updates in diesem Abschnitt zusammengeführt.

xkcd

Wenn Sie beim Plotten mit matplotlib zusätzliche benannte Farben verwenden möchten, können Sie die Crowdsourcing-Farbnamen von xkcd über das Präfix 'xkcd:' verwenden:

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

Jetzt haben Sie Zugriff auf eine Vielzahl benannter Farben!

Geben Sie hier die Bildbeschreibung ein

Tableau

Die Standardfarben für Tableau sind in matplotlib über das Präfix 'tab:' verfügbar:

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

Es gibt zehn verschiedene Farben:

Geben Sie hier die Bildbeschreibung ein

HTML

Sie können Farben auch anhand ihres HTML-Hex-Codes zeichnen :

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

Dies ähnelt eher der Angabe eines RGB-Tupels als einer benannten Farbe (abgesehen von der Tatsache, dass der Hex-Code als Zeichenfolge übergeben wird), und ich werde kein Bild der 16 Millionen Farben einfügen, aus denen Sie auswählen können ...


Weitere Informationen finden Sie in der Dokumentation zu matplotlib-Farben und in der Quelldatei mit den verfügbaren Farben _color_data.py.


joelostblom
quelle
Danke für die Handlung! Unterscheidet sich 'y' aus Neugier wirklich von 'gelb'? Die erste Handlung hat sie als verschiedene Farben.
ComputerScientist
1
@ComputerScientist Ja, gemäß diesem Github-Problem und der Diskussion über die verknüpfte Mailling-Liste wurden den einzelnen Buchstabenfarben RBG-Werte basierend auf ihrem Matlab-Gegenstück zugewiesen, während der vollständige Name den HTML-Farben entspricht. Die Matlab-Einzelbuchstabenfarben folgen derzeit auch dem HTML-Standard, daher bin ich mir nicht sicher, ob es sich um eine kürzlich vorgenommene Matlab-Änderung handelt oder ob die Matplotlib-Einzelbuchstabenfarben aus Gründen wie der Sichtbarkeit, die auch in den Diskussionen erwähnt wurde, optimiert / ausgewählt wurden.
Joelostblom
@AdrianTorrie: Sie können ein Kopfgeld Ihrer Wahl als zusätzliches Dankeschön vergeben! Ein Kopfgeldpreis hebt diese Antwort hervor und gibt dem Antwortenden zusätzliche Punkte.
SherylHohman
Vielen Dank, dass Sie dies auf dem neuesten Stand halten!
JakeCowton
@joelostblom, wie haben Sie im Diagramm der xkcd-Farben die Hex-Codes neben dem Farbnamen (in Schwarz) in Grau angezeigt?
MMelnicki
312

Matplotlib verwendet ein Wörterbuch aus dem Modul colours.py.

Um die Namen zu drucken, verwenden Sie:

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

Dies ist das vollständige Wörterbuch:

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

Sie könnten sie so zeichnen:

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
quelle
1
Danke für die Antwort, genau das habe ich gesucht. Ich denke, in Kombination mit dem Kommentar von @Joe Kington sind so ziemlich alle Grundlagen abgedeckt.
TC Proctor
Hier finden Sie auch die RGB-Werte: flask.sagenb.org/src/plot/colors.py
pceccon
Wenn Sie einen kurzen Blick auf die visuellen Liste benannter Farben online: matplotlib.org/examples/color/named_colors.html
BallpointBen
145

Zusätzlich zu BoshWashs Antwort ist hier das Bild, das durch seinen Code erzeugt wird:

Benannte Farben

Mathias711
quelle
10

So erhalten Sie eine vollständige Liste der Farben, die in Plots verwendet werden sollen:

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

So können Sie schnell verwenden:

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
quelle
Dies fügt nichts hinzu, was die vorherigen Antworten nicht haben.
TC Proctor