Bernama warna dalam matplotlib

259

Apa nama warna yang tersedia di matplotlib untuk digunakan dalam plot? Saya dapat menemukan daftar pada dokumentasi matplotlib yang mengklaim bahwa ini adalah satu-satunya nama:

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

Namun, saya telah menemukan bahwa warna-warna ini juga dapat digunakan, setidaknya dalam konteks ini:

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

tetapi ini tidak ada dalam daftar di atas. Apakah ada yang tahu daftar warna yang lengkap yang tersedia?

TC Proctor
sumber
4
Pada dasarnya, ini semua nama warna HTML, jadi Anda selalu bisa hanya google "warna HTML" jika Anda ingin beberapa grafik yang bagus. @ BoshWash jawaban luar biasa di bawah ini memberi Anda daftar yang tepat.
Joe Kington
14
Ada juga gambar yang bagus di matplotlib.org
Itu gambar yang bagus, saya mungkin seharusnya memperhatikannya. Agar adil, itu pertama kali diposting sebulan sebelum saya memposting pertanyaan ini, dan saya cukup yakin saya telah mencari melalui dokumen berkali-kali sebelumnya untuk jawaban atas pertanyaan ini.
TC Proctor

Jawaban:

303

Saya selalu lupa nama-nama warna yang ingin saya gunakan dan terus kembali ke pertanyaan ini =)

Jawaban sebelumnya sangat bagus, tetapi saya merasa agak sulit untuk mendapatkan gambaran tentang warna yang tersedia dari gambar yang diposting. Saya lebih suka warna dikelompokkan dengan warna yang sama, jadi saya sedikit men-tweak jawaban matplotlib yang disebutkan dalam komentar di atas untuk mendapatkan daftar warna yang diurutkan dalam kolom. Urutannya tidak sama dengan bagaimana saya akan mengurutkan berdasarkan mata, tetapi saya pikir itu memberikan gambaran yang bagus.

Saya memperbarui gambar dan kode untuk mencerminkan bahwa 'rebeccapurple' telah ditambahkan dan tiga warna bijak telah dipindahkan di bawah awalan 'xkcd:' sejak saya memposting jawaban ini pada awalnya.

masukkan deskripsi gambar di sini

Saya benar-benar tidak banyak berubah dari contoh matplotlib, tetapi di sini adalah kode untuk kelengkapannya.

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

Warna bernama tambahan

Diperbarui 2017-10-25. Saya menggabungkan pembaruan saya sebelumnya ke bagian ini.

xkcd

Jika Anda ingin menggunakan warna bernama tambahan saat merencanakan dengan matplotlib, Anda dapat menggunakan nama warna crowdsource xkcd , melalui awalan 'xkcd:':

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

Sekarang Anda memiliki akses ke sejumlah besar warna bernama!

masukkan deskripsi gambar di sini

Tablo

Warna Tableau default tersedia di matplotlib melalui awalan 'tab:':

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

Ada sepuluh warna berbeda:

masukkan deskripsi gambar di sini

HTML

Anda juga dapat memplot warna dengan kode hex HTML mereka :

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

Ini lebih mirip dengan menentukan dan RGB tuple daripada warna bernama (terlepas dari kenyataan bahwa kode hex dilewatkan sebagai string), dan saya tidak akan menyertakan gambar 16 juta warna yang dapat Anda pilih dari ...


Untuk detail lebih lanjut, silakan merujuk ke dokumentasi warna matplotlib dan file sumber yang menentukan warna yang tersedia _color_data.py,.


joelostblom
sumber
Terima kasih untuk plotnya! Karena penasaran, apakah 'kamu' benar-benar berbeda dari 'kuning'? Plot pertama memiliki warna berbeda.
ComputerScientist
1
@ComputerScientist Ya, sesuai dengan masalah Github ini dan diskusi mailling list yang ditautkan, warna huruf tunggal diberi nilai RBG berdasarkan pada mitra Matlab mereka, sedangkan nama lengkapnya sesuai dengan warna HTML. Warna huruf tunggal Matlab saat ini juga mengikuti standar HTML, jadi saya tidak yakin apakah itu merupakan perubahan Matlab baru-baru ini atau apakah warna huruf tunggal matplotlib di-tweak / dipilih karena alasan seperti visibilitas, yang juga disebutkan dalam diskusi.
joelostblom
@AdrianTorrie: Anda bisa memberikan hadiah yang Anda pilih sebagai tambahan 'Terima kasih'! Penghargaan karunia menyoroti hal ini, dan memberikan poin tambahan kepada penjawab.
SherylHohman
Terima kasih telah memperbarui ini!
JakeCowton
@ joelostblom, dalam plot warna xkcd, bagaimana Anda mendapatkan kode hex untuk ditampilkan dalam warna abu-abu, di samping nama warna (dalam warna hitam)?
MMelnicki
312

Matplotlib menggunakan kamus dari modul colors.py-nya.

Untuk mencetak nama gunakan:

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

Ini adalah kamus lengkap:

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

Anda dapat memplotnya seperti ini:

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
sumber
1
Terima kasih atas jawabannya, itulah tepatnya yang saya cari. Saya pikir dalam kombinasi dengan komentar @ Jooe Kington, hampir semua basis dibahas.
TC Proctor
Di sini Anda juga dapat menemukan nilai RGB: flask.sagenb.org/src/plot/colors.py
pceccon
Jika Anda ingin melihat sekilas daftar visual warna bernama online: matplotlib.org/examples/color/named_colors.html
BallpointBen
145

Selain jawaban BoshWash, berikut adalah gambar yang dihasilkan oleh kodenya:

Warna yang dinamai

Mathias711
sumber
10

Untuk mendapatkan daftar warna lengkap untuk digunakan dalam plot:

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

Jadi, Anda dapat menggunakannya dengan cepat:

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
sumber
Ini tidak menambahkan apa pun yang tidak dimiliki jawaban sebelumnya.
TC Proctor