Màu sắc được đặt tên trong matplotlib


259

Những màu được đặt tên có sẵn trong matplotlib để sử dụng trong các ô? Tôi có thể tìm thấy một danh sách trên tài liệu matplotlib tuyên bố rằng đây là những tên duy nhất:

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

Tuy nhiên, tôi thấy rằng những màu này cũng có thể được sử dụng, ít nhất là trong bối cảnh này:

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

nhưng những điều này không có trong danh sách trên. Có ai biết một danh sách đầy đủ các màu được đặt tên có sẵn không?


4
Về cơ bản, đó là tất cả các tên màu HTML, vì vậy bạn luôn có thể chỉ cần google "màu HTML" nếu bạn muốn có một vài biểu đồ đẹp. Câu trả lời tuyệt vời của @ BoshWash dưới đây cung cấp cho bạn danh sách chính xác.
Joe Kington

14
Ngoài ra còn có hình ảnh đẹp này tại matplotlib.org

Đó là một hình ảnh đẹp, tôi có lẽ nên chú ý đến nó. Công bằng mà nói, nó được đăng lần đầu tiên một tháng trước khi tôi đăng câu hỏi này và tôi khá chắc chắn rằng tôi đã tìm kiếm qua các tài liệu nhiều lần trước đó để tìm câu trả lời cho câu hỏi này.
TC Proctor

Câu trả lời:


303

Tôi liên tục quên tên các màu tôi muốn sử dụng và tiếp tục quay lại câu hỏi này =)

Các câu trả lời trước đây rất hay, nhưng tôi cảm thấy hơi khó để có cái nhìn tổng quan về các màu có sẵn từ hình ảnh được đăng. Tôi thích các màu được nhóm với các màu tương tự, vì vậy tôi hơi điều chỉnh câu trả lời matplotlib đã được đề cập trong một nhận xét ở trên để có được một danh sách màu được sắp xếp trong các cột. Thứ tự không giống với cách tôi sắp xếp bằng mắt, nhưng tôi nghĩ nó mang lại một cái nhìn tổng quan tốt.

Tôi đã cập nhật hình ảnh và mã để phản ánh rằng 'rebeccapurple' đã được thêm vào và ba màu sage đã được di chuyển dưới tiền tố 'xkcd:' kể từ khi tôi đăng câu trả lời này ban đầu.

nhập mô tả hình ảnh ở đây

Tôi thực sự không thay đổi nhiều so với ví dụ matplotlib, nhưng đây là mã cho sự hoàn chỉnh.

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

Màu sắc được đặt tên bổ sung

Cập nhật 2017-10-25. Tôi đã hợp nhất các cập nhật trước đây của tôi vào phần này.

xkcd

Nếu bạn muốn sử dụng các màu được đặt tên bổ sung khi vẽ với matplotlib, bạn có thể sử dụng các tên màu được cộng đồng xkcd, thông qua tiền tố 'xkcd:':

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

Bây giờ bạn có quyền truy cập vào rất nhiều màu sắc được đặt tên!

nhập mô tả hình ảnh ở đây

Tableau

Các màu Tableau mặc định có sẵn trong matplotlib thông qua tiền tố 'tab:':

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

Có mười màu riêng biệt:

nhập mô tả hình ảnh ở đây

HTML

Bạn cũng có thể vẽ màu theo mã hex HTML của chúng :

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

Điều này tương tự với việc chỉ định và bộ dữ liệu RGB thay vì màu được đặt tên (ngoài thực tế là mã hex được truyền dưới dạng chuỗi) và tôi sẽ không bao gồm hình ảnh của 16 triệu màu bạn có thể chọn từ ...


Để biết thêm chi tiết, vui lòng tham khảo tài liệu về màu sắc matplotlib và tệp nguồn chỉ định các màu có sẵn , _color_data.py.



Cảm ơn cốt truyện! Vì tò mò, 'y' có thực sự khác với 'màu vàng' không? Cốt truyện đầu tiên có chúng như những màu sắc khác nhau.
ComputerSellectist

1
@ComputerSellectist Có, theo vấn đề Github này và thảo luận về danh sách ma sát được liên kết, các màu chữ cái được gán giá trị RBG dựa trên bản sao Matlab của chúng, trong khi tên đầy đủ tương ứng với màu HTML. Màu sắc chữ cái Matlab hiện tại cũng tuân theo tiêu chuẩn HTML, vì vậy tôi không chắc đó là thay đổi Matlab gần đây hay nếu màu chữ cái matplotlib được điều chỉnh / chọn vì lý do như khả năng hiển thị, cũng được đề cập trong các cuộc thảo luận.
joelostblom

@AdrianTorrie: bạn có thể thưởng một phần thưởng cho sự lựa chọn của riêng bạn như là một 'Cảm ơn' bổ sung! Một giải thưởng tiền thưởng siêu nổi bật câu trả lời này, và cho người trả lời thêm điểm.
SherylHohman

Cảm ơn đã giữ cho đến nay!
JakeCowton

@joelostblom, trong cốt truyện của các màu xkcd, làm thế nào bạn có được các mã hex để hiển thị màu xám, bên cạnh tên màu (màu đen)?
MMelnicki

312

Matplotlib sử dụng một từ điển từ mô-đun colors.txt của nó.

Để in tên sử dụng:

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

Đây là từ điển hoàn chỉnh:

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

Bạn có thể vẽ chúng như thế này:

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
Cảm ơn câu trả lời, đó chính xác là những gì tôi đang tìm kiếm. Tôi nghĩ rằng kết hợp với nhận xét của @Joe Kington, gần như tất cả các cơ sở đều được bảo hiểm.
TC Proctor

Tại đây, bạn cũng có thể tìm thấy các giá trị RGB: Vase.sagenb.org/src/plot/colors.py
pceccon 18/07/14

Nếu bạn muốn xem nhanh danh sách trực quan các màu được đặt tên trực tuyến: matplotlib.org/examples/color/named_colors.html
BallpointBen

145

Ngoài câu trả lời của BoshWash, đây là hình ảnh được tạo bởi mã của anh ấy:

Màu sắc được đặt tên


10

Để có được một danh sách đầy đủ các màu sắc để sử dụng trong các ô:

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

Vì vậy, bạn có thể sử dụng theo cách đó một cách nhanh chóng:

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

Điều này không thêm bất cứ điều gì mà các câu trả lời trước không có.
TC Proctor
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.